Annotation of embedaddon/miniupnpc/testupnpigd.py, revision 1.1.1.1
1.1 misho 1: #! /usr/bin/python
2: # $Id: testupnpigd.py,v 1.4 2008/10/11 10:27:20 nanard Exp $
3: # MiniUPnP project
4: # Author : Thomas Bernard
5: # This Sample code is public domain.
6: # website : http://miniupnp.tuxfamily.org/
7:
8: # import the python miniupnpc module
9: import miniupnpc
10: import socket
11: import BaseHTTPServer
12:
13: # function definition
14: def list_redirections():
15: i = 0
16: while True:
17: p = u.getgenericportmapping(i)
18: if p==None:
19: break
20: print i, p
21: i = i + 1
22:
23: #define the handler class for HTTP connections
24: class handler_class(BaseHTTPServer.BaseHTTPRequestHandler):
25: def do_GET(self):
26: self.send_response(200)
27: self.end_headers()
28: self.wfile.write("OK MON GARS")
29:
30: # create the object
31: u = miniupnpc.UPnP()
32: #print 'inital(default) values :'
33: #print ' discoverdelay', u.discoverdelay
34: #print ' lanaddr', u.lanaddr
35: #print ' multicastif', u.multicastif
36: #print ' minissdpdsocket', u.minissdpdsocket
37: u.discoverdelay = 200;
38:
39: try:
40: print 'Discovering... delay=%ums' % u.discoverdelay
41: ndevices = u.discover()
42: print ndevices, 'device(s) detected'
43:
44: # select an igd
45: u.selectigd()
46: # display information about the IGD and the internet connection
47: print 'local ip address :', u.lanaddr
48: externalipaddress = u.externalipaddress()
49: print 'external ip address :', externalipaddress
50: print u.statusinfo(), u.connectiontype()
51:
52: #instanciate a HTTPd object. The port is assigned by the system.
53: httpd = BaseHTTPServer.HTTPServer((u.lanaddr, 0), handler_class)
54: eport = httpd.server_port
55:
56: # find a free port for the redirection
57: r = u.getspecificportmapping(eport, 'TCP')
58: while r != None and eport < 65536:
59: eport = eport + 1
60: r = u.getspecificportmapping(eport, 'TCP')
61:
62: print 'trying to redirect %s port %u TCP => %s port %u TCP' % (externalipaddress, eport, u.lanaddr, httpd.server_port)
63:
64: b = u.addportmapping(eport, 'TCP', u.lanaddr, httpd.server_port,
65: 'UPnP IGD Tester port %u' % eport, '')
66: if b:
67: print 'Success. Now waiting for some HTTP request on http://%s:%u' % (externalipaddress ,eport)
68: try:
69: httpd.handle_request()
70: httpd.server_close()
71: except KeyboardInterrupt, details:
72: print "CTRL-C exception!", details
73: b = u.deleteportmapping(eport, 'TCP')
74: if b:
75: print 'Successfully deleted port mapping'
76: else:
77: print 'Failed to remove port mapping'
78: else:
79: print 'Failed'
80:
81: httpd.server_close()
82:
83: except Exception, e:
84: print 'Exception :', e
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>