如何将IPV4网段转为整数范围

以 ip 段 127.0.0.0/24 为例

IPv432 位二进制组成(最大地址为 255.255.255.255), 24 代表子网掩码(255.255.255.0)。

###计算 127.0.0.0/24 起始地址;

01111111.00000000.00000000.00000000 # 127.0.0.0
11111111.11111111.11111111.00000000 # 255.255.255.0
   ||
   || 逻辑与
   \/
01111111.00000000.00000000.00000000 # 127.0.0.0,即网段的起始地址

将起始地址 127.0.0.0 转为整数值;

127.0.0.0
   ||
01111111.00000000.00000000.00000000
   ||
127 * pow(2, 24)
   ||
2130706432

###127.0.0.0/24 中的 IP

将掩码转为二进制可以表示为 11111111.11111111.11111111.00000000,其中有 8 个 0, 取出 00000000,将 0 改为 1 得到 11111111,通过二进制计算可以得到:

11111111 == 255

也就是说 127.0.0.0/24 有 256(IP 从 0 开始计算) 个 IP,去除起始地址占用 1 个后, 结束地址的整数为起始地址 + 255

###结果 127.0.0.0/24 的整数范围是:[2130706432, 2130706432 + 255]

###python 解决方案

当然,如果你会 python,那么简单的几行代码就能帮你解决问题;

#!/usr/bin/python
from struct import unpack
from socket import inet_aton

addr, mask = '127.0.0.0', 24
begin = unpack('!I', inet_aton(addr))[0]
end   = begin + pow(2, (32 - mask)) - 1
print [begin, end]