Python3检查IP地址是否为全局IP。

4

我正在尝试使用Python的“new” is_global方法来确定IP地址是否分配给公共网络(https://docs.python.org/3/library/ipaddress.html#ipaddress.IPv4Address.is_global)。然而,这并不起作用:

>>> import ipaddress
>>> ip = ipaddress.IPv4Address('192.0.2.1')
>>> ip.is_private
True
>>> ip.is_reserved
False
>>> ip.is_global
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'IPv4Address' object has no attribute 'is_global'
>>> 

如上所示,其他方法如 is_private 工作正常。我使用的是 Python 3.5.1。
有什么见解吗?

嗯。我可以确认文档中列出的所有其他属性都存在,并且可以检索,但ip.is_global除外。可能是文档错误或者是bug?http://www.gossamer-threads.com/lists/python/bugs/1135780 - wrkyle
你说得对。实现缺失了。基本上它是is_private的NOT。所以如果需要,你可以使用它,直到该错误被修复。 - rfkortekaas
我查看了ipaddress.py模块,它作为一个@property函数存在。但为什么在创建类的实例并尝试检索时,它却找不到呢? - wrkyle
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - user1520506
这个模块还有一个.pyc文件,这让我觉得编译版本中可能有一些东西没有实现。你可能无法获得这个属性。看起来没有绕过它的方法;它只是没有被实现。另外,@rfkortekaas,我想你看的是IPv6类。IPv4类对于is_global有稍微复杂一些的返回值。 - wrkyle
Ipv4Network的is_global更为复杂,但对于地址而言尚未实现。基类实现也不是私有网络的一部分。 - rfkortekaas
1个回答

3
我查看了一个错误报告(这里)并检查了ipaddress.py模块。虽然存在is_global属性,但显然没有实现,该错误报告从2014年春季起仍然未解决,因此不要抱太大希望。如果必要,您可以联系原始错误报告的某个人并获取状态更新。
更新:根据用户@galgalesh的说法,在撰写本问题时,is_global属性尚未实现。Python 3.5于2016-06-11解决了该错误is_global属性已在Python 3.5+中实现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接