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://www.crummy.com/software/BeautifulSoup/bs4/doc/
https://pypi.python.org/pypi/chardet