我有下面显示的 IP 列表。如何在 Linux 中从中计算所有 IP 地址?是否有一些工具可以帮我计算?我需要它来检查我是否没有禁止某些 cloudflare IP。作为防火墙,我使用 shorewall,并使用 fail2ban 禁止单个 IP。据我所知,那么我无法从 IP 地址检测子掩码,对吗?
204.93.240.0/24
204.93.177.0/24
199.27.128.0/21
173.245.48.0/20
103.22.200.0/22
141.101.64.0/18
108.162.192.0/18
190.93.240.0/20
188.114.96.0/20
答案1
我不确定我是否理解了您的问题,但是如果您想将 IP 范围列表扩展为该范围包含的所有 IP,请尝试以下操作:
$ perl -ne '/(.+)\.(\d+)\/(\d+)$/; print "$1.$_\n" foreach($2..$3)' iplist.txt > IPs
这将创建一个名为的文件,IPs
其中包含:
204.93.240..0
204.93.240..1
204.93.240..2
204.93.240..3
...
188.114.96..18
188.114.96..19
188.114.96..20
然后,您可以循环遍历该文件并将所需的任何工具(例如 ping)应用于每个 IP:
$ while read ip; do ping $ip; done < IPs
如果不想创建包含所有 IP 的文件,也可以组合这两个命令:
$ perl -ne '/(.+)\.(\d+)\/(\d+)$/; print "$1.$_\n" foreach($2..$3)' iplist.txt | while read ip; do ping $ip; done
答案2
我遇到了同样的问题,并且接受答案中的 Perl 脚本对我来说不起作用,因为它只考虑了 IPv4 的最后一个字节。
因此我想出了自己的实现,它以源代码和二进制格式提供,适用于不同的系统:CIDR 到 IP 列表