如何提取活动域



Linux中是否有任何bash命令/脚本,以便我们可以从长列表中提取活动域,

例如,我有一个csv文件(domain.csv(有5500万个域水平列出,我们只需要CSV文件中的活动域(active.csv(

这里的活动是指至少具有网页的域,而不是已过期或未过期的域。 示例 whoisdatacenter.info 未过期,但它没有网页,我们认为它是非活动的。

我检查谷歌和堆栈网站。我看到我们可以通过 2 种方式获得域名。喜欢

$ curl -Is google.com | grep -i location 
Location: http://www.google.com/
or 
nslookup google.com | grep -i name 
Name:   google.com

但我不知道如何为 5500 万个域编写一个程序。

下面的命令,不会给出任何结果,所以我提出 nsloop 和 curl 是获得结果的途径

$ nslookup whoisdatacenter.info | grep -i name 
$ curl -Is whoisdatacenter.info | grep -i location 

第一 25 行

$ head -25 domains.csv 
"
"0----0.info"
"0--0---------2lookup.com"
"0--0-------free2lookup.com"
"0--0-----2lookup.com"
"0--0----free2lookup.com"
"0--1.xyz"
"0--123456789.com"
"0--123456789.net"
"0--6.com"
"0--7.com"
"0--9.info"
"0--9.net"
"0--9.world"
"0--a.com"
"0--a.net"
"0--b.com"
"0--m.com"
"0--mm.com"
"0--reversephonelookup.com"
"0--z.com"
"0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0.com"
"0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0.com"
"0-0-0-0-0-0-0-0-0-0-0-0-0-10-0-0-0-0-0-0-0-0-0-0-0-0-0.info"

我正在运行的代码

while read line; 
do nslookup "$line" | awk '/Name/'; 
done < domains.csv > active3.csv

我得到的结果

sh -x ravi2.sh 
+ read line
+ nslookup ''
+ awk /Name/
nslookup: '' is not a legal name (unexpected end of input)
+ read line
+ nslookup '"'
+ awk /Name/
+ read line
+ nslookup '"0----0.info"'
+ awk /Name/
+ read line
+ nslookup '"0--0---------2lookup.com"'
+ awk /Name/
+ read line
+ nslookup '"0--0-------free2lookup.com"'
+ awk /Name/
+ read line
+ nslookup '"0--0-----2lookup.com"'
+ awk /Name/
+ read line
+ nslookup '"0--0----free2lookup.com"'
+ awk /Name/

仍然,active3.csv 为空 下面。脚本正在工作,但某些东西阻止了批量查找,要么是在我的主机中,要么是其他东西。

while read line
do
nslookup $(echo "$line" | awk '{gsub(/r/,"");gsub(/.*-|"$/,"")} 1') | awk '/Name/{print}'
done < input.csv >> output.csv

批量 nslookup 在下面显示此类错误

server can't find facebook.com13: NXDOMAIN

[已解决] Ravi脚本工作正常,我在我的MAC中运行,这给了Nslookup错误,我在CentOS Linux服务器工作,Nslookup与Ravi脚本一起工作得很好

多谢!!

编辑: 请按照OP显示的示例尝试我的编辑解决方案。

while read line
do
nslookup $(echo "$line" | awk '{gsub(/r/,"");gsub(/.*-|"$/,"")} 1') | awk '/Name/{found=1;next} found && /Address/{print $NF}'
done < "Input_file"


您能否尝试以下操作。

OP 在她的Input_file中有控制 M 字符,因此也运行以下命令,请先删除它们:

tr -d 'r' < Input_file > temp && mv temp Input_file

然后运行以下代码:

while read line
do
nslookup "$line" | awk '/Name/{found=1;next} found && /Address/{print $NF}'
done < "Input_file"

我假设由于您正在传递域名,因此您需要在输出中获取他们的地址(IP 地址(。另外,由于您使用的是巨大的Input_file,因此提供输出可能会有点慢,但请相信我,这是一种更简单的方法。

>nslookup只是指示域名在DNS中是否有记录。拥有一个或多个 IP 地址并不自动意味着您有一个网站;许多 IP 地址完全被分配用于不同的目的(但可能巧合地完全托管另一个域名的网站!

(此外,nslookup对脚本不是特别友好;您需要查看dig而不是自动化。

没有简单的方法可以在短时间内访问5500万个可能的网站,如果你愿意,可能你不应该使用Bash。例如,请参阅 https://pawelmhm.github.io/asyncio/python/aiohttp/2016/04/22/asyncio-aiohttp.html,了解基于 Python 的各种方法的阐述。

即时错误消息表明输入文件中有 DOS 回车符;这是一个常见的常见问题解答,在 shell 脚本对编码和行尾敏感吗?

您可以并行运行多个curl实例,但最终可能会使您的网络饱和 - 尝试不同程度的并行性 - 可能会将文件拆分为较小的部分,并在具有单独网络连接的单独主机上运行每个部分(可能在云中(,但要快速演示,

tr -d 'r' <file |
xargs -P 256 -i sh -c 'curl -Is {} | grep Location'

并行运行 256 个curl实例。您仍然需要弄清楚哪个输出对应于哪个输入,因此可以重构为类似

tr -d 'r' <file |
xargs -P 256 -i sh -c 'curl -Is {} | sed -n "s/Location/{}:&/p"'

以在每个输出前面打印输入域名。

(也许还要注意,只是一个域名并不是一个完整的URL。curl会很有帮助地尝试在前面添加一个"http://",然后连接到它,但如果该域只有一个"https://"网站并且没有从 http://重定向,这仍然不会给你一个准确的结果。

如果您使用的是Mac,xargs不理解-i,请尝试-I {}或类似的东西

tr -d 'r' <file |
xargs -P 256 sh -c 'for url; do curl -Is "$url" | sed -n "s/Location/{}:&/p"; done' _

这些示例假设您还没有一劳永逸地修复 DOS 回车符;您可能真的应该(并考虑从等式中完全删除 Windows(。

最新更新