1
0
Fork 0
Find a file
Daniel Baumann 24d17ebe6c
Releasing debian version 1.1.10-2.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-05-25 20:29:47 +02:00
.github Adding upstream version 1.1.10. 2025-05-17 06:08:25 +02:00
cmd/whois Adding upstream version 1.1.10. 2025-05-17 06:08:25 +02:00
debian Releasing debian version 1.1.10-2. 2025-05-25 20:29:47 +02:00
scripts Adding upstream version 1.1.10. 2025-05-17 06:08:25 +02:00
.gitattributes Adding upstream version 1.1.10. 2025-05-17 06:08:25 +02:00
.gitignore Adding upstream version 1.1.10. 2025-05-17 06:08:25 +02:00
go.mod Adding upstream version 1.1.10. 2025-05-17 06:08:25 +02:00
LICENSE Adding upstream version 1.1.10. 2025-05-17 06:08:25 +02:00
Makefile Adding upstream version 1.1.10. 2025-05-17 06:08:25 +02:00
README.md Adding upstream version 1.1.10. 2025-05-17 06:08:25 +02:00
whois.go Adding upstream version 1.1.10. 2025-05-17 06:08:25 +02:00
whois_test.go Adding upstream version 1.1.10. 2025-05-17 06:08:25 +02:00

whois

test

Lightweight library for retrieving WHOIS information on a domain.

It automatically retrieves the appropriate WHOIS server based on the domain's TLD by first querying IANA.

Usage

As an executable

To install it:

go install github.com/TwiN/whois/cmd/whois@latest

Alternatively, you can download whois from the release section, though you'll have to unzip the file first.

To run it:

whois example.com

As a library

go get github.com/TwiN/whois

Query

If all you want is the text a WHOIS server would return you, you can use the Query method of the whois.Client type:

package main

import "github.com/TwiN/whois"

func main() {
    client := whois.NewClient()
    output, err := client.Query("example.com")
    if err != nil {
    	panic(err)
    }
    println(output)
}

QueryAndParse

If you want specific pieces of information, you can use the QueryAndParse method of the whois.Client type:

package main

import "github.com/TwiN/whois"

func main() {
    client := whois.NewClient()
    response, err := client.QueryAndParse("example.com")
    if err != nil {
    	panic(err)
    }
    println(response.ExpirationDate.String()) 
}

Note that because there is no standardized format for WHOIS responses, this parsing may not be successful for every single TLD.

Currently, the only fields parsed are:

  • ExpirationDate: The time.Time at which the domain will expire
  • DomainStatuses: The statuses that the domain currently has (e.g. clientTransferProhibited)
  • NameServers: The nameservers currently tied to the domain

If you'd like one or more other fields to be parsed, please don't be shy and create an issue or a pull request.

Caching referral WHOIS servers

The way that WHOIS scales is by having one "main" WHOIS server, namely whois.iana.org:43, refer to other WHOIS server on a per-TLD basis.

In other word, let's say that you wanted to have the WHOIS information for example.com. The first step would be to query whois.iana.org:43 with com, which would return whois.verisign-grs.com. Then, you would query whois.verisign-grs.com:43 for the WHOIS information on example.com.

If you're querying a lot of servers, making two queries instead of one can be a little wasteful, hence WithReferralCache(true):

client := whois.NewClient().WithReferralCache(true)

The above will cache the referral WHOIS server for each TLD, so that you can directly query the appropriate WHOIS server instead of first querying whois.iana.org:43 for the referral.