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 }