指望的输出应显示从
192.168.3.65
到192.168.3.94
的所有IP 如下
192.168.3.65
192.168.3.66
192.168.3.67
...
...
192.168.3.94
>>> for x in ipaddress.ip_network('192.168.3.78/27'):
print(x)
Traceback (most recent call last):
File "<pyshell#31>", line 1, in <module>
for x in ipaddress.ip_network('192.168.3.78/27'):
File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\ipaddress.py", line 74, in ip_network
return IPv4Network(address, strict)
File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\ipaddress.py", line 1536, in __init__
raise ValueError('%s has host bits set' % self)
ValueError: 192.168.3.78/27 has host bits set
接口对象
可以接受任意主机地址并为您提供相应的网络:
for x in ipaddress.ip_network('192.168.3.78/27', strict=False):
print(x)
# 192.168.3.64
# 192.168.3.65
# . . .
# 192.168.3.95
192.168.3.78
是主机,而不是CIDR块中的网络(192.168.3.64/27
将是网络)。解释
在CIDR符号中,一个代表一个前缀(网络)及其长度(可能从0到32不等)的地址块。如果网络的长度为27,则意味着IP地址块中的每个IP都有27个固定的二进制数字和5(= 32-27)二进制数字,它们在地址末尾可能会有所不同(给出2^5个可能的组合)。
功能函数期望IP地址
ip_network
是一个network,在CIDR中,网络是
192.168.3.78
192.168.3.78
通过将最后5位数字设置为0,一个获得了预期网络
binary_strings = list(map(lambda x: f"{bin(x)[2:]:0>8}", [192,168,3,78]))
print(*binary_strings)
# 11000000 10101000 00000011 01001110
%s has host bits set
11000000 10101000 00000011 01000000
。实际上,这不会产生错误:
192.168.3.64