ipaddress 模块 ValueError('%s 设置了主机位' % self)

新手上路,请多包涵

我正在尝试通过 Python3 列出给定网络范围的有效主机, ipaddress 模块,但在尝试列出所有有效主机时出现 ValueError ValueError('%s has host bits set' % 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

原文由 Raja G 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
2 个回答

文档 中所述:

如果地址不代表有效的 IPv4 或 IPv6 地址,或者 网络设置了主机位,则会引发 ValueError。

斜杠后的数字(在您的情况下为 16)表示为 subnet 保留的位数,因此最后 16 位是您的主机位。此方法要求这些位为 0(未设置)。

原文由 Lafexlos 发布,翻译遵循 CC BY-SA 3.0 许可协议

你还有另一个选择。从上面提到的 文档 中,我们可以看到:

如果 strict 为 True 并且在提供的地址中设置了主机位,则会引发 ValueError。否则,主机位将被屏蔽掉以确定适当的网络地址。

所以,请再次尝试关注。

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

原文由 Sam 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题