2016-11-28 196 views
0

我想通过Python3,ipaddress模块列出给定网络范围的有效主机,但在尝试列出所有有效的主机时收到ValueError ValueError('%s has host bits set' % self)IP地址模块ValueError('%s有主机位设置'%self)

>>> ip_range=input("Enter IP Range:") 
Enter IP Range:192.168.56.101/16 
>>> list(ipa.ip_network(ip_range).hosts()) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib/python3.5/ipaddress.py", line 74, in ip_network 
    return IPv4Network(address, strict) 
    File "/usr/local/lib/python3.5/ipaddress.py", line 1536, in __init__ 
    raise ValueError('%s has host bits set' % self) 
ValueError: 192.168.56.101/16 has host bits set 
+0

不知道这应该是评论,还是答案,或者可能更好的链接到体面的文档。 IP地址有两部分,“网络部分”和“主机部分”。网络部分排在第一位,主机部分排在第二位。 '/'后面的数字表示有多少位是“网络部分”。实际上,这是用于路由的部分。主机部分用于查找主机,一旦找到网络。 – Vatine

回答

2

documentation指出:

一个ValueError如果地址不表示一个有效的IPv4或IPv6的 地址,或者如果网络具有设置主机位上升。

(在你的案件16)斜杠后的数字意味着,subnet保留位数,所以最后16位是主机位。该方法要求这些位为0(未设置)。

+0

所以你的意思是我必须输入网络范围为192.168.56.101/0?我对网络概念不太熟悉。 –

+0

'192.168.0.0/16'是你最想要的东西。 – Lafexlos

+0

好的,谢谢。我会尝试 –

0

您有另一种选择。 从上述document,我们可以看到:

如果严格为True和主机位在所提供的地址设置,那么 ValueError被挂起。否则,主机位被屏蔽出去,以确定合适的网络地址为 。

所以,请再试一次。

ip_range = '192.168.56.101/16' 
list(ipaddress.ip_network(ip_range, False).hosts())