diff options
Diffstat (limited to 'whois.go')
| -rw-r--r-- | whois.go | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/whois.go b/whois.go new file mode 100644 index 0000000..c2f4f76 --- /dev/null +++ b/whois.go @@ -0,0 +1,51 @@ +package main + +import ( + "fmt" + "io/ioutil" + "net" + "time" +) + +const ( + WHOIS_SERVER = /*"whois-servers.net"*/ "whois.cymru.com" + WHOIS_PORT = "43" + TIMEOUT = 30 + RETRIES = 1 +) + +func main() { + domains := []string{"109.105.104.100", "123.123.123.123"} + res, err := whois(domains, WHOIS_SERVER) + if err != nil { + return + } + fmt.Println(res) +} + +/* implements the whois protocal described at https://en.wikipedia.org/wiki/Whois#Protocol */ +func whois(domains []string, server string) (answer string, err error) { + var conn net.Conn + for i := 0; i < RETRIES; i++ { + conn, err = net.DialTimeout("tcp", net.JoinHostPort(server, WHOIS_PORT), time.Second*TIMEOUT) + if err != nil { + return + } + } + defer conn.Close() + + //conn.Write([]byte(" -p " + domain + "\r\n")) + conn.Write([]byte(" -p -o -f -u begin\r\n")) + for _, d := range domains { + conn.Write([]byte(d + "\r\n")) + } + conn.Write([]byte("end\r\n")) + + buffer, err := ioutil.ReadAll(conn) + if err != nil { + return + } + + answer = string(buffer[:]) + return +} |
