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