bash 从域列表中捕获 ips 和 whois 范围
bash capture ips and whois range from a list of domains
我有一个包含数千个域的列表。例如:
.google.com
.gmail.com
.google.co
.yahoo.com
等等,等等,等等
我需要解析这些域的IP地址,然后,获取范围whois。手册示例:
host -t a gmail.com = 216.58.192.69
whois 216.58.192.69 | grep CIDR = 216.58.192.0/19
但我无法使用列表。我把错误标记在括号中
#!/bin/bash
cat domains.txt | host -t a (error) | grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" > list.txt
cat list.txt | whois (error) | grep CIDR | sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n > final.txt
非常感谢
更新...我想我明白了,但它不是一个非常优雅的脚本。一定会有更好的办法。此外。首先你必须从列表中删除:点数、评论、www 等(使用 sed)
dig +short -f domains.txt | egrep -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" | sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n | uniq > ips
cat ips | while read ips; do whois $ips | grep CIDR; done | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\/[0-9]\{1,\}' > cidr.txt
sort -o cidr.txt -u cidr.txt -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n cidr.txt
重要:脚本需要检查IP/CIDR的列表,以避免(或删除)冲突:示例:
54.200.0.0/14 is a subnetwork of 54.192.0.0/12
额外请求:有时 "whois" 没有响应 CIDR 及其显示消息:
% Types of queries are: POCs, ownerid, CIDR blocks, IP
如果没有CIDR,如何将查询到的ip传递给最终的acl???
谢谢
for X in `cat domains.txt`;
do
host -t a $X;
done | awk 'BEGIN { FS = " " } ; { print }' > ip.txt;
for Y in `cat ip.txt`;
do
whois $Y | grep CIDR;
done
我有一个包含数千个域的列表。例如:
.google.com
.gmail.com
.google.co
.yahoo.com
等等,等等,等等
我需要解析这些域的IP地址,然后,获取范围whois。手册示例:
host -t a gmail.com = 216.58.192.69
whois 216.58.192.69 | grep CIDR = 216.58.192.0/19
但我无法使用列表。我把错误标记在括号中
#!/bin/bash
cat domains.txt | host -t a (error) | grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" > list.txt
cat list.txt | whois (error) | grep CIDR | sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n > final.txt
非常感谢
更新...我想我明白了,但它不是一个非常优雅的脚本。一定会有更好的办法。此外。首先你必须从列表中删除:点数、评论、www 等(使用 sed)
dig +short -f domains.txt | egrep -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" | sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n | uniq > ips
cat ips | while read ips; do whois $ips | grep CIDR; done | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\/[0-9]\{1,\}' > cidr.txt
sort -o cidr.txt -u cidr.txt -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n cidr.txt
重要:脚本需要检查IP/CIDR的列表,以避免(或删除)冲突:示例:
54.200.0.0/14 is a subnetwork of 54.192.0.0/12
额外请求:有时 "whois" 没有响应 CIDR 及其显示消息:
% Types of queries are: POCs, ownerid, CIDR blocks, IP
如果没有CIDR,如何将查询到的ip传递给最终的acl???
谢谢
for X in `cat domains.txt`;
do
host -t a $X;
done | awk 'BEGIN { FS = " " } ; { print }' > ip.txt;
for Y in `cat ip.txt`;
do
whois $Y | grep CIDR;
done