File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / miniupnpc / testupnpigd.py
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 23:16:22 2012 UTC (12 years, 4 months ago) by misho
Branches: miniupnpc, elwix, MAIN
CVS tags: v1_8p0, v1_8, v1_6, HEAD
miniupnpc

    1: #! /usr/bin/python
    2: # $Id: testupnpigd.py,v 1.1.1.1 2012/02/21 23:16:22 misho 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>