summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--whois.go51
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
+}