根据子网掩码获取所有 ip 地址

根据子网掩码获取所有 ip 地址

我有下面显示的 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 列表

答案3

没有,自从跨域路由引入后,您无法从 IP 地址推导出网络掩码。您可以通过将网络地址转换为整数,加上 2^(32-网络掩码),然后将结果转换回,来计算广播地址(子网中的最高地址)四点十进制符号。

相关内容