我们知道IP地址段可以写成 192.168.1.0-192.168.1.255 的形式,也可以写成 192.168.1.0/24 的形式。如果给定一个段 192.168.1.1-192.168.1.64,如何改写成掩码的形式?
之前通过归纳法推算过,30位掩码可以表示4个地址,24位掩码可以表示256个地址,25位有128个地址,26位64个地址,以此类推
30 255.255.255.252
29 255.255.255.248
28 255.255.255.240
27 255.255.255.224
26 255.255.255.192
25 255.255.255.128
一个IP地址段是可以转化为一系列的小的掩码段,最终 192.168.1.1-192.168.1.64 是可以表示为如下地址段:
地址段:192.168.1-192.168.1.64
分解表示:
192.168.1.1/32
192.168.1.2/31
192.168.1.4/30
192.168.1.8/29
192.168.1.16/28
192.168.1.32/27
192.168.1.64/32
这个不用手算,实际上有人写了个命令行工具用来实现 IP 地址段的分解和合并。因为有些场合,比如部分防火墙路由配置中只认掩码形式,这时就需要将范围形式的地址段改写成掩码形式。
项目地址:
https://github.com/zhanhb/cidr-merger
工具是用 go 语言写的,在 Release 页面提供了 Windows 和 Linux 下的编译好的版本。这里我们以 Windows 版本的为例,讲解一下如何使用。

首先 cidr-merge 支持 IP 段分解为掩码形式:
echo 192.168.1.1-192.168.1.64| cidr-merger-windows-amd64.exe -s

如果将分解后的文件重定向到文件,我们试试是否可以合并分解的地址段:
echo 192.168.1.1-192.168.1.64\| cidr-merger-windows-amd64.exe -s > ip-range.txttype ip-range.txt | cidr-merger-windows-amd64.exe -r

我们尝试打乱顺序,看是否仍然可以正常合并。

顺序打乱后,cidr-merge 仍然可以正常合并IP段。

这里给出的例子只是简单的 C 类地址段,看起来手工也可以算出来。如果是一个大段,就会了解到这个工具的价值。比如:
1.0.0.1-223.255.255.254
换算后的结果如下:

这是一款不可多得到的IP处理神器,以后遇到IP段和掩码之间的转换,再也不用担心不会换算了。




