Port Forwarding Python
У меня есть скрипт которому нужно открыть TCP порт и получить некую информацию из интернета. Но этот скрипт не работает, потому что компьютер на котором он запущен находится в локальной сети роутера (что называется за NAT), который не в курсе что кому-то в локальной сети нужен открытый порт.
На Python есть решение этой проблемы, библиотека upnpy. Есть даже код, из примера к описанию библиотеки, который должен открыть порт.
Я его чутка переиначил, конечно, он продолжает делать тоже самое что и в примере, добавилась лишь проверка ошибок (например иногда функция поиска подходящих устройств не возвращает никаких устройств).
Но проблема не исчезла, я все еще не могу получить доступ к компьютеру за роутером, хотя функция проброса портов отрабатывает без ошибок.
def forward(laddr, port):
upnp = UPnP()
devices = upnp.discover()
if len(devices) == 0:
print("[ERROR] Not available UPnP devices.")
return None
device = upnp.get_igd()
print("[UPnP] Device name: %s" % device.friendly_name)
for x in device.get_services():
service_name = x.id.split(":")[-1]
service_check = device[service_name]
for i in service_check.get_actions():
if i.name == "AddPortMapping":
service = device[service_name]
break
print("[UPnP] Service name: %s" % service_name, service)
print(service.AddPortMapping.get_input_arguments())
res = service.AddPortMapping(
NewRemoteHost="",
NewExternalPort=port,
NewProtocol="TCP",
NewInternalPort=port,
NewInternalClient=laddr,
NewEnabled=1,
NewPortMappingDescription="PSFT",
NewLeaseDuration=0
)
print(res)
forward("192.168.1.210", 9090)```