File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / miniupnpc / testupnpigd.py
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Sep 27 11:21:37 2023 UTC (8 months, 2 weeks ago) by misho
Branches: miniupnpc, elwix, MAIN
CVS tags: v2_2_5p0, HEAD
Version 2.2.5p0

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>