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>