Skip to content

Instantly share code, notes, and snippets.

@sinancetinkaya
Created February 24, 2020 22:21
Show Gist options
  • Save sinancetinkaya/349c07205411123a1434912438713c5f to your computer and use it in GitHub Desktop.
Save sinancetinkaya/349c07205411123a1434912438713c5f to your computer and use it in GitHub Desktop.
# original code is from https://www.gkbrk.com/2016/08/about-the-whois-protocol/
import socket
from functools import lru_cache
@lru_cache(maxsize=32)
def get_tld_server(tld="com"):
sock = socket.socket()
sock.connect(("whois.iana.org", 43))
sock.send("{}\n".format(tld).encode("utf-8"))
for line in sock.makefile():
parts = line.split(":", 2)
if len(parts) > 1:
header_name = parts[0].strip()
header_value = parts[1].strip()
if header_name.lower() == "whois":
return header_value
def get_whois_data(domain, server=None):
if not server:
tld = domain.split(".")[-1]
server = get_tld_server(tld)
nextserver = None
sock = socket.socket()
sock.connect((server, 43))
sock.send("{}\n".format(domain).encode("utf-8"))
for line in sock.makefile():
parts = line.split(":", 2)
if len(parts) > 1:
header_name = parts[0].strip()
header_value = parts[1].strip()
if header_name.lower() == "whois server":
nextserver = header_value
yield line.replace("\n", "")
if nextserver:
for line in get_whois_data(domain, nextserver):
yield line
responses = []
responses.append("\n".join(get_whois_data("gkbrk.com")))
responses.append("\n".join(get_whois_data("hepsiburada.com")))
responses.append("\n".join(get_whois_data("openwrt.org")))
responses.append("\n".join(get_whois_data("deu.edu.tr")))
for response in responses:
print(response)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment