Получение типа NAT и внешнего IP-адреса - PullRequest
0 голосов
/ 18 сентября 2018

До сих пор я пытался использовать 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 голосов
/ 18 сентября 2018

Вероятно, это проблема с python версиями, исходный код pystun использует 2.x, а вы используете 3.x.

Посмотрите на строку исходного кода , где возникает ошибка, мы видим, что он вызывает метод словарей .items() и пытается получить доступ к его членам по позиции.

Вот проблема:

Краткий ответ: вы не можете использовать pystun репо с python 3.x;возможно, можно сделать некоторые исправления, или вы можете просто скопировать и изменить исходный код самостоятельно, а не полагаться на внешнее хранилище.

...