#! /usr/bin/env python # vim: tabstop=2 shiftwidth=2 expandtab # MiniUPnP project # Author : Thomas Bernard # Python 3 # This Sample code is public domain. # website : https://miniupnp.tuxfamily.org/ # import the python miniupnpc module import miniupnpc import sys try: import argparse parser = argparse.ArgumentParser() parser.add_argument('-m', '--multicastif') parser.add_argument('-p', '--minissdpdsocket') parser.add_argument('-d', '--discoverdelay', type=int, default=200) parser.add_argument('-z', '--localport', type=int, default=0) # create the object u = miniupnpc.UPnP(**vars(parser.parse_args())) except: print('argparse not available') i = 1 multicastif = None minissdpdsocket = None discoverdelay = 200 localport = 0 while i < len(sys.argv): print(sys.argv[i]) if sys.argv[i] == '-m' or sys.argv[i] == '--multicastif': multicastif = sys.argv[i+1] elif sys.argv[i] == '-p' or sys.argv[i] == '--minissdpdsocket': minissdpdsocket = sys.argv[i+1] elif sys.argv[i] == '-d' or sys.argv[i] == '--discoverdelay': discoverdelay = int(sys.argv[i+1]) elif sys.argv[i] == '-z' or sys.argv[i] == '--localport': localport = int(sys.argv[i+1]) else: raise Exception('invalid argument %s' % sys.argv[i]) i += 2 # create the object u = miniupnpc.UPnP(multicastif, minissdpdsocket, discoverdelay, localport) print('inital(default) values :') print(' discoverdelay', u.discoverdelay) print(' lanaddr', u.lanaddr) print(' multicastif', u.multicastif) print(' minissdpdsocket', u.minissdpdsocket) #u.minissdpdsocket = '../minissdpd/minissdpd.sock' # discovery process, it usually takes several seconds (2 seconds or more) print('Discovering... delay=%ums' % u.discoverdelay) print('%d device(s) detected' % u.discover()) # select an igd try: u.selectigd() except Exception as e: print('Exception :', e) sys.exit(1) # it is also possible to pass the root description URL to u.selectigd() : # u.selectigd('http://192.168.1.254:5678/desc/root') # display information about the IGD and the internet connection print('local ip address :', u.lanaddr) print('external ip address :', u.externalipaddress()) print( u.statusinfo(), u.connectiontype()) print('total bytes : sent', u.totalbytesent(), 'received', u.totalbytereceived()) print('total packets : sent', u.totalpacketsent(), 'received', u.totalpacketreceived()) #print u.addportmapping(64000, 'TCP', # '192.168.1.166', 63000, 'port mapping test', '') #print u.deleteportmapping(64000, 'TCP') port = 0 proto = 'UDP' # list the redirections : i = 0 while True: p = u.getgenericportmapping(i) if p==None: break print(i, p) (port, proto, (ihost,iport), desc, c, d, e) = p #print port, desc i = i + 1 print(u.getspecificportmapping(port, proto)) try: print(u.getportmappingnumberofentries()) except Exception as e: print('GetPortMappingNumberOfEntries() is not supported :', e)