Вы можете увидеть хороший пример как часть инфраструктуры Coherence DNLA/UPnP в модуле Python под названием «Puncher» («пробивает» дыры в вашем брандмауэре, да! :о), который может создавать сопоставления внешних портов (например, порт 8080) на внутренние порты по вашему выбору:
http://coherence.beebits.net/browser/trunk/Puncher/puncher/base.py
Модули Coherence также доступны в Debian в виде пакета python-coherence. В Windows также, если вы используете ActiveState Python.
Я предполагаю, что вы хотите сделать это автоматически/программно как часть того, что вы создаете, поэтому я указал вам на приведенный выше заголовок Структура Coherence DNLA/UPnP в Python.
Если вы просто хотите сделать это вручную, есть несколько отличных инструментов командной строки и графического интерфейса для создания сопоставлений портов UPnP. На компьютерах Mac ручной инструмент с графическим интерфейсом доступен по адресу http://www.codingmonkeys.de/portmap/index.html от создателей SubEtha Edit. В Windows ручной инструмент с графическим интерфейсом доступен по адресу http://deusty.blogspot.com/2008/07/tcmportmapper-for-windows.html .
Я настоятельно рекомендую вам поиграть с Coherence в Python, это может быть увлекательным опытом программирования. В качестве альтернативы, многие различные программы, использующие сеть, будут иметь модули UPnP для открытия портов и перенаправления/сопоставления их с вашим локальным компьютером. Например, он есть у µTorrent, у libtorrent/rtorrent и у многих других.
См. также следующие библиотеки, примеры и инструменты с реализациями клиента UPnP для программного перенаправления/сопоставления портов на вашем маршрутизаторе, если вы не любите Python (они на C и Perl):
http://miniupnp.tuxfamily.org/
https://trac.transmissionbt.com/browser/trunk/libtransmission/upnp.c
http://www.howtoforge.com/administrating-your-gateway-device-via-upnp
Обратите внимание, что вторая ссылка, https://trac.transmissionbt.com/browser/trunk/libtransmission/upnp.c — это код популярного BitTorrent-клиента Transmission, который использует библиотеку miniupnp (первая ссылка).
Надеюсь, это ответило на ваш вопрос. Желаю удачи во всем, что вы делаете.
РЕДАКТИРОВАТЬ: @kaneda: В ответ на ваш комментарий вы находитесь за двумя NAT, один у вашего DSL-модема, а другой у вашего беспроводного маршрутизатора, если я вас правильно понимаю. Простой UPnP здесь вам не поможет, вам нужно либо настроить UPnP сопоставление портов как на DSL-модеме, так и на маршрутизаторе (вероятно, это невозможно, так как ваш маршрутизатор, вероятно, не позволит запросам UPnP покидать свой порт WAN), DSL-модем или ваш маршрутизатор для моста, а не NAT, чтобы вы были только за одним NAT.
РЕДАКТИРОВАТЬ 2: @kaneda: Другой возможный способ обойти двойное преобразование NAT — это заменить маршрутизатор устройством Linux (например, с помощью OpenWRT или аналогичного) и запустить там код upnp для переадресации DSL. порт модема, а затем также запустите код на основе miniupnp на своем хосте за маршрутизатором, чтобы еще больше открыть маршрутизатор. Однако в этот момент, поскольку у вас есть контроль над маршрутизатором, вы можете просто создать статическое сопоставление портов и передать ему все запросы протокола UPNP на модем DSL (указав iptables выборочно пересылать / NAT эти пакеты назад / далее, что выходит за рамки этого ответа).
person
ido
schedule
05.12.2010