检索 NAT 类型和外部 IP 地址
Retrieving NAT type and external IP address
到目前为止,我尝试使用 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
版本的问题,pystun
的原始代码使用2.x
而你使用3.x
。
查看 source code line where error originates,我们可以看到它调用字典 .items()
方法并尝试按位置访问其成员。
这是问题所在:
- 在
python 2.x
中,dict.items()
returns 元组列表。
- 在
python 3.x
中,dict.items()
returns a view无法按位置访问,只能迭代
简答:您不能将 pystun
存储库与 python 3.x
一起使用;也许可以做一些补丁,或者你可以自己复制和修改源代码而不是依赖外部 repo。
您可以使用 PyNAT,它基于 pystun,也支持 python3。
它也在 PyPi 上,可以用 pip install pynat
安装。
到目前为止,我尝试使用 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
版本的问题,pystun
的原始代码使用2.x
而你使用3.x
。
查看 source code line where error originates,我们可以看到它调用字典 .items()
方法并尝试按位置访问其成员。
这是问题所在:
- 在
python 2.x
中,dict.items()
returns 元组列表。 - 在
python 3.x
中,dict.items()
returns a view无法按位置访问,只能迭代
简答:您不能将 pystun
存储库与 python 3.x
一起使用;也许可以做一些补丁,或者你可以自己复制和修改源代码而不是依赖外部 repo。
您可以使用 PyNAT,它基于 pystun,也支持 python3。
它也在 PyPi 上,可以用 pip install pynat
安装。