检索NAT类型和外部IP地址

时间:2018-09-18 14:53:58

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

到目前为止,我尝试使用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类型信息。

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

1 个答案:

答案 0 :(得分:0)

python版本,使用pystun的{​​{1}}的原始代码以及您使用2.x的{​​{1}}的原始代码,可能是一个问题。

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

问题出在这里

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

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