【问题标题】:Retrieving NAT type and external IP address检索 NAT 类型和外部 IP 地址
【发布时间】:2018-09-18 14:53:57
【问题描述】:

到目前为止,我尝试使用pystun,但遵循手册:

import stun
nat_type, external_ip, external_port = stun.get_ip_info()

产量:

>>> import stun
>>> nat_type, external_ip, external_port = stun.get_ip_info()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.6/dist-packages/stun/__init__.py", line 253, in get_ip_info
    stun_host=stun_host, stun_port=stun_port)
  File "/usr/local/lib/python3.6/dist-packages/stun/__init__.py", line 186, in get_nat_type
    _initialize()
  File "/usr/local/lib/python3.6/dist-packages/stun/__init__.py", line 93, in _initialize
    dictValToAttr.update({items[i][1]: items[i][0]})
TypeError: 'dict_items' object does not support indexing

似乎不再维护存储库。我发现ipgetter 获取IP 地址的速度超快,不幸的是它没有提供NAT 类型信息。

有效检索两者的替代方法是什么?

【问题讨论】:

    标签: python python-3.x python-3.6 stun


    【解决方案1】:

    这可能是python版本的问题,pystun的原始代码使用2.x而你使用3.x

    查看source code line where error originates,我们可以看到它调用字典.items() 方法并尝试按位置访问其成员。

    问题来了:

    • python 2.x 中,dict.items() 返回一个元组列表。
    • python 3.x中,dict.items()返回一个view,不能按位置访问,只能迭代。

    简短回答:您不能将 pystun 存储库与 python 3.x 一起使用;也许可以做一些补丁,或者你可以自己复制和修改源代码,而不是依赖外部 repo。

    【讨论】:

      【解决方案2】:

      你可以使用PyNAT,它基于pystun,也支持python3。

      它也在PyPi上,可以用pip install pynat安装。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-13
        • 2011-07-29
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        • 2011-06-29
        • 1970-01-01
        相关资源
        最近更新 更多