Web 用域名列表做whois

Web 用域名列表做whois,web,whois,pywhois,Web,Whois,Pywhois,我有一个相当于2500个域名的文件 我想在这些域名上做一个whois 问题是我从来没有这样做过,也不知道从哪里开始。如果你有什么想法,我洗耳恭听 TIA.假设域位于名为domains.txt的文件中,并且您已安装了pywhois,那么类似的操作应该可以实现: 导入whois infle=“domains.txt” #从文件中获取域 开放式(填充“rb”)为f: domains=[line.rstrip()表示f中的行,如果line.rstrip()] 对于域中的域: 打印域 记录=whois.w

我有一个相当于2500个域名的文件

我想在这些域名上做一个whois

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


TIA.

假设域位于名为
domains.txt
的文件中,并且您已安装了
pywhois
,那么类似的操作应该可以实现:

导入whois
infle=“domains.txt”
#从文件中获取域
开放式(填充“rb”)为f:
domains=[line.rstrip()表示f中的行,如果line.rstrip()]
对于域中的域:
打印域
记录=whois.whois(域)
#将每个whois记录写入文件{domain}.txt
将open(“%s.txt”%domain,'wb')作为f:
f、 写(记录.文本)
这将把每个whois记录输出到名为
{domain}.txt


没有
pywhois

导入子流程
infle=“domains.txt”
#从文件中获取域
开放式(填充“rb”)为f:
domains=[line.rstrip()表示f中的行,如果line.rstrip()]
对于域中的域:
打印域
记录=子进程。检查输出([“whois”,域])
#将每个whois记录写入文件{domain}.txt
将open(“%s.txt”%domain,'wb')作为f:
f、 写(记录)

您还可以使用Linux commandtool
whois
。 以下代码打开子进程并搜索域

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

导入子流程
def find_whois(域):
#Linux“whois”命令包装器
# 
#使用linux命令whois执行whois查找。
#返回代码来自:https://github.com/rfc1036/whois/blob/master/whois.c
domain=domain.lower().strip()
d=域。拆分('.'))
如果d[0]=“www”:d=d[1:]
#运行带有超时的命令
proc=subprocess.Popen(['whois',domain],stderr=subprocess.PIPE,stdout=subprocess.PIPE)
ans,err=程序通信(输入)
如果err==1:raisewhoiserror('此TLD没有Whois服务器或查询语法错误')
elif err==2:raise WhoisError('Whois在'+str(Whois_超时)+'秒之后超时。(请稍后重试或尝试更高的超时)'))
ans=ans.decode('UTF-8')
返回ans
以open('domains.txt')作为输入:
以open('out.txt','a')作为输出:
对于行输入:
输出.写入(查找谁(行))
with open as
语句处理文件流。
输出文件中的“a”表示该文件以附加模式打开

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

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

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

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

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


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

从下载并安装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脚本。

是否只下载列表中每个域的每个whois记录?或者你想解析出注册人信息吗?嗨,Ajcr,解析出注册人信息是什么意思?嗨@AndyK,我只是想知道你希望捕获什么:如果你只是希望得到每个域的whois查找结果(比如,将每个查找的结果写入自己的文本文件)或者,如果您希望自动提取域名所有者的联系信息(例如姓名、电话号码),并将这些信息存储在CSV文件中。Hi@Ajcr,我会说第二个选项。但是我不知道怎么做……请给出一个例子,说明该文件中的一条记录,以及您希望该记录得到的答案。嗨,Martin,在我出现错误之前,几乎工作正常
record=whois.whois(域)AttributeError:'module'对象没有属性“whois”
。我试图用
pywhois
来更改它,但我得到了那个错误
record=whois.whois(域)name错误:没有定义名称“whois”
@你安装了pywhois吗?您可以这样安装:
pip install python whois
Bonjour Céline,我已经安装了
pywhois
。使用
pywhois
时,我遇到了以下错误
record=whois.whois(域)名称错误:未定义名称“whois”
。米瑟尔……嗯,你可能和这个家伙有同样的问题:可能安装了两个pywhois?(请注意,如果您安装了
easy\u pywhois
,您将获得与python库不同的CLI工具)如果您在使用whois包时遇到问题,则可以使用
record=subprocess。检查输出([“whois”,domain])
,而不是
record=whois.whois(domain)
。同时将
导入whois
更改为
导入子流程
。这应该可以在Unix上运行,但我对Windows不太确定。嗨,Alu,谢谢,但是…:)我有一个文件
domains.txt
,它将包含
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])
name
google.com
yahoo.com
stackoverflow.com
$domainname = Import-Csv -Path "C:\domains.txt"
foreach($domain in $domainname) 
{
   .\whois.exe $domain.name Export-Csv -Path "C:\domain-info.csv" -Append
}