用域名列表做whois



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

我想对这些域名做个调查。

问题是我从来没有这样做过,也不知道从哪里开始。如果你有什么想法,我洗耳恭听。

TIA。

您也可以使用Linux命令工具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"表示该文件是以追加模式打开的。

看起来你已经得到了一些有用的答案,但我认为最好多谈谈批量(和一般)进行WHOIS查找的挑战,并提供一些替代解决方案。

WHOIS查找

查找单个域名通常包括找到该域的相关WHOIS服务器,然后通过端口43请求信息。如果您可以访问类似unix的shell(例如Bash),则可以使用whois轻松完成此操作(正如其他人所指出的):

$ whois example.com

非常相似的WHOIS工具也被提供作为大量编程语言的模块。Python的pywhois模块就是一个例子。

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

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

#!/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

注意WHOIS批量查找的以下复杂性:

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

    如果你想要尽可能完整的记录,你通常必须访问注册表的网站或可能缓存了记录的第三方服务(例如DomainTools)。这更难自动化,可能必须手动完成。即便如此,记录也可能不包含您想要的内容(例如,注册人的联系方式)。

  • 一些WHOIS服务器对您在特定时间内可以发出的请求数量施加限制。如果你达到了限制,你可能会发现你必须在几个小时后返回才能再次请求记录。例如,对于.org域,您在一分钟内最多只能查找三次,一些注册商会24小时禁止您登录。

    最好在两次查找之间暂停几秒钟,或者尝试按TLD打乱您的域列表,这样您就不会连续太多次打扰同一服务器。

  • 一些WHOIS服务器经常停机,请求将超时,这意味着您可能需要返回并重新进行这些查找。ICANN规定whois服务器必须有相当不错的正常运行时间,但我发现有一两台服务器在发布记录方面很糟糕。

正在分析记录

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

  • 记录的格式并不总是一致的。你会在.com域中发现这一点。.com记录可能由全球数千家注册商中的任何一家持有(不是由.com注册中心Verisign持有),并且并非所有注册商都选择以ICANN推荐的易于解析的格式呈现记录。

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

既然已经提到了,pywhois是解析WHOIS数据的一个选项。这里有一个非常简单的Python脚本,它查找每个域的WHOIS记录,并提取注册者名称(如果可能*),将结果写入CSV文件。如果你喜欢,你也可以包括其他字段:

import whois
import csv
with open("domains.txt", "r") as f:
    domains = f.readlines()
    
with open("output_file.csv", "wb") as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(["Domain", "Registrant Name"])
    for domain in domains:
        domain = domain.rstrip()
        record = whois.whois(domain)
        try:
            r_name = record.registrant_name
        except AttributeError:
            r_name = "error"
        writer.writerow([domain, r_name])

*当我快速测试这个脚本时,pywhois在提取注册者名称方面不是很可靠。另一个可以尝试的类似库是pythonwhois

假设域在一个名为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)

从下载并安装Microsoft的whois工具http://technet.microsoft.com/en-us/sysinternals/bb897435.aspx

创建一个包含域名列表和标题行的文本文件。

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脚本。

您可以使用一个简单的"一个衬垫";使用命令CCD_ 10。

xargs -n 1 -a valid_dns.txt -I {} sh -c 'echo "Domain: {}"; whois {}'

++

相关内容

  • 没有找到相关文章

最新更新