4

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

我想对这些域名进行whois。

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

TIA。

4

4 回答 4

8

您还可以使用 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”表示文件以附加模式打开。

于 2014-11-16T11:47:10.843 回答
3

看起来您已经获得了一些有用的答案,但我认为最好多谈谈批量(和一般而言)进行 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 域,您在一分钟内最多只能进行 3 次查找,并且一些注册商会在 24 小时内禁止您。

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

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

解析记录

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

  • 记录的格式并不总是一致的。您会在 .com 域中发现这一点。.com 记录可能由全球数以千计的注册商中的任何一个持有(不是 .com 注册机构,威瑞信),并且并非所有人都选择以 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.

于 2014-11-17T22:57:11.337 回答
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)
于 2014-11-13T22:40:06.627 回答
1

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

于 2014-11-18T09:37:33.063 回答