Есть некий порт, который хочется открыть наружу. По умолчанию, на компьютере все порты открыты, но снаружи их загораживает 1 или 2 роутера(с поддержкой UPnP — иначе как бы работал скайп, или торрент?).
Соответственно не понятно — что нужно прописать в коде, чтобы не делать проброс портов на роутере, а тот порт, на который ожидается коннект извне, открывался(пробрасывался) сам собой.
Например тут (miranda-upnp) посмотреть принцип работы. В downloads/ есть readme.html который показывает как можно создать портмаппинг.
А потом можно использовать эту библиотеку (pyupnp) чтобы реализовать портмаппинг в своей программе.
Но я надеюсь что включая (вернее не выключая) UPnP на роутере вы в курсе уязвимости, которой уже более четырех лет (пример 1, 2) и которая может просто открыть вашу сеть злоумышленнику простым посещением сайта с флешем?
Прикольно. А что конкретно уязвимость позволяет — пользоваться моим компьютером, для передачи данных, пока я просматриваю этот флеш-ролик? Ну ни хай отошлют пару пакетов — почему нет? :)
По ссылкам объясняется что можно сделать. Эффект будет перманентный, так как через UPnP можно управлять устройством, ролик нужно «запустить» один раз, все настройки что он сделал остануться до перезагрузки роутера. Например у вас на машине включен RDP (SSH, FTP, подставьте свое) чтобы из кухни в комнату не ходить… Флеш может сделать проброс 3389 (22, 21, любого) порта и ваш «RDP» окажется выставленный в мир, и можно будет произвести брутфорс и получить доступ на внутреннюю машину. (Хотя вы уверены что за файрволом роутера ей ничего не угрожает).
Из второй ссылки (перевел для удобства):
Следующее возможно с помощью UPnP:
портмап внутренних сервисов на внешнем интерфейсе (проброс портов)
портмап веб-интерфейса роутера на внешнем интерфейсе (позволяет брутфорсить вебку роутера из инета)
портмап на любой внешний адрес (помогает злоумышленнику скрыть свой IP при аттаках на внешний адрес. Он посылает пакеты на ваш роутер и промапленный порт, а ваш роутер от своего IP уже пересылает пакеты на хост жертвы)
подмена DNS серверов (актуально если роутер одновременно DHCP-сервер, позволяет перенаправить запросы какого-нить bank.com на сервер злоумышленника).
изменить административные пароли на роутер
изменить настройки подключения PPP
изменить настройки IP на всех интерфейсах
изменить настройки WiFi
разорвать соединение
Это конечно больше для параноиков, но лучше знать что потенциально можно сделать с помощью этого протокола.
И нужно выбирать между «да кому я нафиг нужен» и безопасностью :)