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 9import miniupnpc 10import socket 11import BaseHTTPServer 12 13# function definition 14def 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 24class 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 31u = 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 37u.discoverdelay = 200; 38 39try: 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 83except Exception, e: 84 print 'Exception :', e 85