1: #! /usr/bin/env python
2: # vim: tabstop=2 shiftwidth=2 expandtab
3: # MiniUPnP project
4: # Author : Thomas Bernard
5: # Python 3
6: # This Sample code is public domain.
7: # website : https://miniupnp.tuxfamily.org/
8:
9: # import the python miniupnpc module
10: import miniupnpc
11: import sys
12:
13: try:
14: import argparse
15: parser = argparse.ArgumentParser()
16: parser.add_argument('-m', '--multicastif')
17: parser.add_argument('-p', '--minissdpdsocket')
18: parser.add_argument('-d', '--discoverdelay', type=int, default=200)
19: parser.add_argument('-z', '--localport', type=int, default=0)
20: # create the object
21: u = miniupnpc.UPnP(**vars(parser.parse_args()))
22: except:
23: print('argparse not available')
24: i = 1
25: multicastif = None
26: minissdpdsocket = None
27: discoverdelay = 200
28: localport = 0
29: while i < len(sys.argv):
30: print(sys.argv[i])
31: if sys.argv[i] == '-m' or sys.argv[i] == '--multicastif':
32: multicastif = sys.argv[i+1]
33: elif sys.argv[i] == '-p' or sys.argv[i] == '--minissdpdsocket':
34: minissdpdsocket = sys.argv[i+1]
35: elif sys.argv[i] == '-d' or sys.argv[i] == '--discoverdelay':
36: discoverdelay = int(sys.argv[i+1])
37: elif sys.argv[i] == '-z' or sys.argv[i] == '--localport':
38: localport = int(sys.argv[i+1])
39: else:
40: raise Exception('invalid argument %s' % sys.argv[i])
41: i += 2
42: # create the object
43: u = miniupnpc.UPnP(multicastif, minissdpdsocket, discoverdelay, localport)
44:
45: print('inital(default) values :')
46: print(' discoverdelay', u.discoverdelay)
47: print(' lanaddr', u.lanaddr)
48: print(' multicastif', u.multicastif)
49: print(' minissdpdsocket', u.minissdpdsocket)
50: #u.minissdpdsocket = '../minissdpd/minissdpd.sock'
51: # discovery process, it usually takes several seconds (2 seconds or more)
52: print('Discovering... delay=%ums' % u.discoverdelay)
53: print('%d device(s) detected' % u.discover())
54: # select an igd
55: try:
56: u.selectigd()
57: except Exception as e:
58: print('Exception :', e)
59: sys.exit(1)
60: # it is also possible to pass the root description URL to u.selectigd() :
61: # u.selectigd('http://192.168.1.254:5678/desc/root')
62: # display information about the IGD and the internet connection
63: print('local ip address :', u.lanaddr)
64: print('external ip address :', u.externalipaddress())
65: print( u.statusinfo(), u.connectiontype())
66: print('total bytes : sent', u.totalbytesent(), 'received', u.totalbytereceived())
67: print('total packets : sent', u.totalpacketsent(), 'received', u.totalpacketreceived())
68:
69: #print u.addportmapping(64000, 'TCP',
70: # '192.168.1.166', 63000, 'port mapping test', '')
71: #print u.deleteportmapping(64000, 'TCP')
72:
73: port = 0
74: proto = 'UDP'
75: # list the redirections :
76: i = 0
77: while True:
78: p = u.getgenericportmapping(i)
79: if p==None:
80: break
81: print(i, p)
82: (port, proto, (ihost,iport), desc, c, d, e) = p
83: #print port, desc
84: i = i + 1
85:
86: print(u.getspecificportmapping(port, proto))
87: try:
88: print(u.getportmappingnumberofentries())
89: except Exception as e:
90: print('GetPortMappingNumberOfEntries() is not supported :', e)
91:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>