Создание общедоступного TCPServer из-за маршрутизатора - PullRequest
2 голосов
/ 23 января 2012

питон 2.7.2 Windows 7 32 бит

Позвольте мне предвосхитить этот вопрос: я довольно новичок в сетевом программировании. Я создал простой сервер и клиент, используя встроенный в Python SocketServer

SocketServer.ThreadingTCPServer((host, port), Handler)

Это прекрасно работает, когда хост - «localhost», а клиент и сервер находятся на одном компьютере. Однако я хочу иметь доступ к серверу через Интернет. Мой компьютер находится за маршрутизатором. Я использую Pystun (ниже) определить публичный IP-адрес моего компьютера, но я не могу подключиться. Я провел небольшое исследование, и я понимаю, что когда программа открывает порт, маршрутизатор распознает это и перенаправляет трафик на этот компьютер. Похоже, этого не происходит. Я получаю тот же результат с отключенным брандмауэром. Нужно ли использовать переадресацию портов? Как большинство приложений могут общаться из-за маршрутизатора? Я изучил puncher (источник ниже) и переадресацию портов через win32com здесь . Я ищу кого-то, чтобы указать мне в правильном направлении. Как программно заставить сервер открыть порт прослушивания из-за маршрутизатора и перенаправить трафик на него?

Источник перфорации: https://coherence.beebits.net/svn/trunk/Puncher/puncher/base.py Пыстун: http://pypi.python.org/pypi/pystun

Ответы [ 2 ]

1 голос
/ 23 января 2012
lafibre.info/download/upnp/igdctl.pl

Я использовал этот скрипт целую вечность, очевидно, что он написан на perl, поэтому вы можете использовать его как есть или перенести на python.

FWIW, я уже давно собирался перенести его на python, поэтому, если вам нужна рука, пингуйте меня (richoH на github)

0 голосов
/ 23 января 2012

Это (переадресация портов) необходимо настроить на маршрутизаторе. Поскольку за маршрутизатором (вероятно) находится несколько устройств, ему необходимо знать, на какое устройство направлять трафик, поступающий на порт 80 (или любой другой).

...