全网域名扫描项目还在进行中,之前想的很简单的whois提取本以为很简单,看了下linux下whois出来的结果格式很多都不一样,自己写的话是比较麻烦的。

在线接口的话找了很多,还是只有站长之家最靠谱,但是由于量很大,而且又有请求限制,还是决定再找找whois的轮子,找了两个,一个很烂,.cn  .com.cn等很多根域名都不支持,参数必须顶级域名,结果还不包括邮箱。

python-whois

但是用的另一个模块结果就非常nice了,结果返回dict格式,

下载地址
python-whois-0.6.5.tar2017.3.16 – 20.55 Kb
说明:需要安装future模块

pypi地址:https://pypi.python.org/pypi/python-whois

2018年4月10日 更新

发现一个严重问题,由于模块为国外开发,又因为不同根域名返回的whois格式不同,所以这个模块中根本没有对 .cn的whois 信息做处理,以至于.cn的域名注册时间与过期时间是获取不到的。

所以模块中parser.py 中需要小改一下,

新增一个class

class WhoisCn(WhoisEntry):
    """Whois parser for .cn domains
    """
    regex = {
        'domain_name': 'Domain Name: *(.+)',
        'registrar': 'Registrar: *(.+)',
        'whois_server': 'Whois Server: *(.+)',  # empty usually
        'referral_url': 'Referral URL: *(.+)',  # http url of whois_server: empty usually
        'updated_date': 'Updated Date: *(.+)',
        'creation_date': 'Registration Time: *(.+)',
        'expiration_date': 'Expiration Time: *(.+)',
        'name_servers': 'Name Server: *(.+)',  # list of name servers
        'status': 'Status: *(.+)',  # list of statuses
        'emails': EMAIL_REGEX,  # list of email addresses
    }

    def __init__(self, domain, text):
        if 'No match for "' in text:
            raise PywhoisError(text)
        else:
            WhoisEntry.__init__(self, domain, text, self.regex)

判断域名后缀的地方也要通过新加的类处理:
python whois 模块

最后修改后的最新版:python-whois 0.6.9,直接打包一版:
python-whois_修改版2018.4.10 – 92.72 Kb