计算一个IP地址属于哪些子网

Calculate which subnets an IP address belongs to

我有点卡在一个特定的问题上。我需要计算一个 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' 子网表示法。您可以将 2**32-1 替换为 4294967295,我将其留在那里以便更清楚发生了什么。