Skip to content

Instantly share code, notes, and snippets.

@fspot
Created March 25, 2014 19:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fspot/9770024 to your computer and use it in GitHub Desktop.
Save fspot/9770024 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Usage: python upn.py list
python upn.py add|delete <port> tcp|udp"""
import miniupnpc
import sys
try:
ACTION = sys.argv[1].lower()
assert ACTION in ('add', 'delete', 'list')
if ACTION != 'list':
PORT = int(sys.argv[2])
PROTOCOL = sys.argv[3].upper()
assert PROTOCOL in ('TCP', 'UDP')
except:
print __doc__
sys.exit(0)
u = miniupnpc.UPnP()
u.discoverdelay = 200;
u.discover()
u.selectigd()
if ACTION == 'add':
u.addportmapping(PORT, PROTOCOL, u.lanaddr, PORT, 'description', '')
elif ACTION == 'delete':
u.deleteportmapping(PORT, PROTOCOL)
elif ACTION == 'list':
external_addr = u.externalipaddress()
for i in xrange(2**16):
info = u.getgenericportmapping(i)
if info is None:
break
(port, proto, (ihost, iport), _, _, _, _) = info
print '[%s] %s:%d ---> %s:%d' % (proto, external_addr, port, ihost, iport)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment