使用 Python 获取眩晕信息

Get Stun info with Python

我试图通过 Python

获取外部 IP 和端口

我使用:pip install pystun

import stun
stun.get_ip_info()

但是我得到了错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.8/dist-packages/stun/__init__.py", line 252, in get_ip_info
    nat_type, nat = get_nat_type(s, source_ip, source_port,
  File "/usr/local/lib/python3.8/dist-packages/stun/__init__.py", line 186, in get_nat_type
    _initialize()
  File "/usr/local/lib/python3.8/dist-packages/stun/__init__.py", line 93, in _initialize
    dictValToAttr.update({items[i][1]: items[i][0]})
TypeError: 'dict_items' object is not subscriptable

我该如何解决?

那是因为 pystun 已经过时了。 pystun 不支持 python 的最新版本。相反,安装 pystun3

pip uninstall pystun # uninstall already installed pystun module
pip install pystun3
import stun
print(stun.get_ip_info())
#('Symmetric NAT', '111.111.11.111', 1027)

或者,您可以获取您的外网IP地址,如下:

import http.client
conn = http.client.HTTPConnection("ifconfig.me")
conn.request("GET", "/ip")
print(conn.getresponse().read())

有关详细信息,请参阅 https://ru.whosebug.com/questions/133137/

原来的 Pystun 在 Pypi 上没有support Python 3. There is a fork that supports Python 3 which you can install using pip install pystun3 (pystun3