使用域名列表做一个whois

时间:2014-11-06 15:05:40

标签: web whois pywhois

我有一个域名文件,例如相当于2500。

我想对这些域名做一个whois。

问题是我从未这样做过,也不知道从哪里开始。如果您有任何想法,我会全力以赴。

TIA。

4 个答案:

答案 0 :(得分:7)

您也可以使用Linux commandtool whois。 以下代码打开一个子流程并搜索域。

但是你必须在短时间内小心处理许多请求。一段时间后服务器最终会阻止你。 ;)

import subprocess

def find_whois(domain):
    # Linux 'whois' command wrapper
    # 
    # Executes a whois lookup with the linux command whois.
    # Returncodes from: https://github.com/rfc1036/whois/blob/master/whois.c

    domain = domain.lower().strip()
    d = domain.split('.')
    if d[0] == 'www': d = d[1:]

    # Run command with timeout
    proc = subprocess.Popen(['whois', domain], stderr=subprocess.PIPE, stdout=subprocess.PIPE)
    ans,err = proc.communicate(input)

    if err == 1: raise WhoisError('No Whois Server for this TLD or wrong query syntax') 
    elif err == 2: raise WhoisError('Whois has timed out after ' + str(whois_timeout) + ' seconds. (try again later or try higher timeout)')
    ans = ans.decode('UTF-8')
    return ans


with open('domains.txt') as input:
    with open('out.txt','a') as output:
        for line in input:
            output.write(find_whois(line))

with open as语句处理文件流。 ' a'在输出文件中表示文件以append-mode打开。

答案 1 :(得分:2)

假设这些域位于名为domains.txt的文件中并且您安装了pywhois,那么这样的事情应该可以解决这个问题:

import whois

infile = "domains.txt"

# get domains from file
with open(infile, 'rb') as f:
    domains = [line.rstrip() for line in f if line.rstrip()]

for domain in domains:
    print domain
    record = whois.whois(domain)

    # write each whois record to a file {domain}.txt
    with open("%s.txt" % domain, 'wb') as f:
        f.write(record.text)

这会将每个whois记录输出到名为{domain}.txt

的文件中

没有pywhois

import subprocess

infile = "domains.txt"

# get domains from file
with open(infile, 'rb') as f:
    domains = [line.rstrip() for line in f if line.rstrip()]

for domain in domains:
    print domain
    record = subprocess.check_output(["whois", domain])

    # write each whois record to a file {domain}.txt
    with open("%s.txt" % domain, 'wb') as f:
        f.write(record)

答案 2 :(得分:2)

看起来你已经有了一些有用的答案,但我认为可以更好地说一下批量(和一般)进行WHOIS查询的挑战,并提供一些替代解决方案。 / p>

WHOIS查询

查找单个域名通常涉及为该域找到相关的WHOIS服务器,然后通过端口43请求信息。如果您可以访问类似unix的shell(例如Bash),则可以使用{{1}很容易做到这一点(正如其他人所说):

whois

非常类似的WHOIS工具也可用作各种编程语言的模块。 Python的pywhois模块就是一个例子。

在最简单的形式中,批量WHOIS查找只是循环遍历域列表,为每个域发出whois请求并将记录写入输出。

以下是Bash中的一个示例,它从文件$ whois example.com 中读取域并将每个WHOIS记录写入单独的文件中(如果您正在使用Windows,请尝试使用Cygwin。)

domains.txt

谨防批量WHOIS查询的以下复杂情况:

  • 某些WHOIS服务器可能无法为您提供完整的WHOIS记录。对于特定国家/地区的域名(例如.de和.fr)以及在某些注册商(例如GoDaddy)注册的域名尤其如此。

    如果您想要尽可能完整的记录,您通常必须访问注册管理机构的网站或可能已缓存记录的第三方服务(例如DomainTools)。这自动化要困难得多,可能需要手动完成。即使这样,记录也可能不包含您想要的内容(例如注册人的联系方式)。

  • 某些WHOIS服务器对您在特定时间范围内可以提出的请求数量施加了限制。如果达到限制,您可能会发现必须在几小时后返回再次请求记录。例如,对于.org域名,您在一分钟内限制为不超过三次,一些注册商会禁止您24小时。

    最好在查找之间暂停几秒钟,或尝试通过TLD对域名列表进行随机播放,这样您就不会在同一服务器上连续多次打扰。

  • 有些WHOIS服务器经常关闭,请求会超时,这意味着您可能需要返回并重新执行这些查找。 ICANN规定whois servers must have a pretty decent uptime,但我发现一两台服务器在发布记录时非常糟糕。

解析记录

解析WHOIS记录(例如注册人联系信息)可能是一项挑战,因为:

  • 记录的格式并不总是一致的。您特别会在.com域名中找到它。 .com记录可能是全球数千个注册商中的任何一个(不是.com注册表,Verisign),并非所有人都选择以ICANN推荐的易于解析的格式提供记录。

  • 同样,您要提取的信息可能不在您从查询中返回的记录中。

由于已经提到过,pywhois是解析WHOIS数据的一种选择。这是一个非常简单的Python脚本,它查找每个域的WHOIS记录并提取注册人名称(如果可能*),将结果写入CSV文件。如果您愿意,也可以包含其他字段:

#!/bin/bash

domain_list="domains.txt"

while read line 
do
    name=$line
    echo "Looking up ${line}..."
    whois $name > ${line}.txt
    sleep 1
done < $domain_list

*当我快速测试这个脚本时,pywhois在提取注册人名称时并不是非常可靠。您可以尝试的另一个类似的库是pythonwhois

答案 3 :(得分:0)

http://technet.microsoft.com/en-us/sysinternals/bb897435.aspx

下载并安装Microsoft的whois工具

使用带有标题行的域名列表创建一个文本文件。

name
google.com
yahoo.com
stackoverflow.com

创建一个powershell脚本:

$domainname = Import-Csv -Path "C:\domains.txt"
foreach($domain in $domainname) 
{
   .\whois.exe $domain.name Export-Csv -Path "C:\domain-info.csv" -Append
}

运行powershell脚本。