Whois简介
whois(读作“Who is”,非缩写)是用来查询域名的IP以及所有者等信息的传输协议。简单说,whois就是一个用来查询域名是否已经被注册,以及注册域名的详细信息的数据库(如域名所有人、域名注册商)。通过whois来实现对域名信息的查询。早期的whois查询多以命令列接口存在,但是现在出现了一些网页接口简化的线上查询工具,可以一次向不同的数据库查询。网页接口的查询工具仍然依赖whois协议向服务器发送查询请求,命令列接口的工具仍然被系统管理员广泛使用。whois通常使用TCP协议43端口。每个域名/IP的whois信息由对应的管理机构保存。
不同域名后缀的whois信息需要到不同的whois数据库查询。如.com的whois数据库和.edu的就不同。目前国内提供WHOIS查询服务的网站有万网、站长之家的等。每个域名或IP的WHOIS信息由对应的管理机构保存,例如,以.com结尾的域名的WHOIS信息由.com域名运营商VeriSign管理,中国国家顶级域名.cn域名由CNNIC管理[1] 。
WHOIS服务是一个在线的“请求/响应”式服务。WHOIS Server运行在后台监听43端口,当Internet用户搜索一个域名(或主机、联系人等其他信息)时,WHOIS Server首先建立一个与Client的TCP连接,然后接收用户请求的信息并据此查询后台域名数据库。如果数据库中存在相应的记录,它会将相关信息如所有者、管理信息以及技术联络信息等,反馈给Client。待Server输出结束,Client关闭连接,至此,一个查询过程结束。
有些注册商,对国际域名的whois信息是屏蔽的,如果要查询只能联系对应的注册商。这种保护机制是防止有人恶意利用这种whois信息的联系方式,暴露客户的隐私信息。
使用python获取网站域名信息
下面的例子将使用站长之家的whois,结合网页爬虫的使用,来获取whois信息。
#!/usr/bin/python # -*- coding: utf-8 -*- ''' this code is to get whois info by http://whois.chinaz.com/ Created on 2015-05-13 version: 0.1 @author: zhang ''' import os from urllib2 import Request, urlopen, URLError, HTTPError from bs4 import BeautifulSoup import chardet import socket socket.setdefaulttimeout(30) class get_whois: def __init__(self,url): self.url = url def getDomainInfo(self): domain='http://whois.chinaz.com/'+self.url req = Request(domain) try: response = urlopen(req) except URLError , e : if isinstance(e.reason, socket.timeout): print 'socket timeout' print "network meets some problems: " print "Reason: ",e.reason else: if response != None: the_page = response.read() char = chardet.detect(the_page) #解码为unicode the_page.decode(char['encoding'],'ignore') soup = BeautifulSoup(the_page) #<div class="div_whois"> #因为http://whois.chinaz.com/返回的信息 #包含在 <div class="div_whois">标签中,直接获取 domain = soup.find('div',id="whoisinfo") domain = unicode(domain) return domain if __name__ == "__main__": domain = ['baidu.com'] test = get_whois(domain[0]) info = test.getDomainInfo() print info
执行后,info的内容为:
<div class="div_whois" id="whoisinfo">注册商:MARKMONITOR INC.<br/>域名服务器:whois.markmonitor.com<br/>DNS服务器:DNS.BAIDU.COM<br/>DNS服务器:NS2.BAIDU.COM<br/>DNS服务器:NS3.BAIDU.COM<br/>DNS服务器:NS4.BAIDU.COM<br/>DNS服务器:NS7.BAIDU.COM<br/>域名状态:运营商设置了客户禁止删除保护 http://www.icann.org/epp#运营商设置了客户禁止删除保护<br/>域名状态:运营商设置了客户禁止转移保护 http://www.icann.org/epp#运营商设置了客户禁止转移保护<br/>域名状态:运营商设置了客户禁止修改保护 http://www.icann.org/epp#运营商设置了客户禁止修改保护<br/>域名状态:域名服务器上禁止删除保护 http://www.icann.org/epp#域名服务器上禁止删除保护<br/>域名状态:域名服务器上禁止转移保护 http://www.icann.org/epp#域名服务器上禁止转移保护<br/>域名状态:域名服务器上禁止修改保护 http://www.icann.org/epp#域名服务器上禁止修改保护<br/>更新时间:2013年10月14日<br/>创建时间:1999年10月11日<br/>过期时间:2015年10月11日<br/>联系人:: zhiyong duan<br/><br/></div>
因为免费的原因,获取的信息并不全面,且有许多信息被服务商封闭
获取相应信息后,可以对其进一步的进行解析,例如,结合python中的re模块,对时间信息进行提取等。
在以上例子中使用了python的两个工具包,分别是Beautifulsoup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖析树(parse tree)。 它提供简单又常用的导航(navigating),搜索以及修改剖析树的操作。它可以大大节省你的编程时间。
另外一个是chardet,用来实现字符串/文件编码检测。
在执行代码时,要确保程序可以找到这两个工具包。具体的见参考文件中的源包相关URL
参考文献:
http://baike.baidu.com/link?url=2eMXzLsFeJFyKxD6117bmL1L6Ka-bFP-SAxK0zF30VagwYD8StCLPnoEf9rDdjj_8metwL1QpcF2XImNDoUvLK
http://whois.chinaz.com/
http://www.crummy.com/software/BeautifulSoup/bs4/doc/
https://pypi.python.org/pypi/chardet