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)```

Ответы (0 шт):