计算IP地址所属子网



我被困在一个特定的问题上。我需要计算一个IP地址所属的子网。它可以在SQL或Python或类似的。

所以如果我有例如100.100.100.105,我需要得到所有的子网:

100.100.100.105/32
100.100.100.104/31
100.100.100.104/30
100.100.100.104/29
100.100.100.96/28
100.100.100.96/27
100.100.100.64/26
...
100.64.0.0/10
100.0.0.0/9
...
64.0.0.0/2
0.0.0.0/1

但我真的不知道如何处理这个问题。

您可以使用ipaddress内置的python3模块实现此功能

import ipaddress
addresses = []
# get the int representation of your ip
ip = int(ipaddress.IPv4Address('100.100.100.105'))
for mask in range(32):
addresses.append(f'{ipaddress.IPv4Address(ip & ((2**32-1)-(2**mask -1)))}/{32-mask }')

在每次迭代中,我们通过在IP的整数表示和掩码之间进行逻辑与运算,将掩码应用到IP上。然后将结果转换为ip字节组,并附加'/24'子网表示法。你可以用4294967295代替2**32-1,我把它留在那里,这样更清楚发生了什么。