计算一个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
,我将其留在那里以便更清楚发生了什么。
我有点卡在一个特定的问题上。我需要计算一个 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
,我将其留在那里以便更清楚发生了什么。