Похоже, есть несколько вариантов, один из которых miniupnp . Здесь также есть привязки python для GNUPnP здесь . Для Windows minupnp будет работать, или вы можете пойти чистый Python с Миранда-UpNP .
Есть хороший пример привязки Python GNUPnP, используемой для открытия портов на маршрутизаторе здесь .
В этом примере время аренды установлено на 0, что не ограничено. См. здесь для определения add_port.
Простой пример может быть:
#! /usr/bin/python
import gupnp.igd
import glib
from sys import stderr
my_ip = YOUR_IP
igd = gupnp.igd.Simple()
igd.external_ip = None
main = glib.MainLoop()
def mep(igd, proto, eip, erip, port, localip, lport, msg):
if port == 80:
igd.external_ip = eip
main.quit()
def emp(igd, err, proto, ep, lip, lp, msg):
print >> stderr, "ERR"
print >> stderr, err, proto, ep, lip, lp, msg
main.quit()
igd.connect("mapped-external-port", mep)
igd.connect("error-mapping-port", emp)
#igd.add_port("PROTO", EXTERNAL_PORT, INTERNAL_IP, INTERNAL_PORT, LEASE_DURATION_IN_SECONDS, "NAME")
igd.add_port("TCP", 80, my_ip, 8080, 86400, "web")
main.run()