version 1.1.1.1, 2012/02/21 23:16:22
|
version 1.1.1.2, 2023/09/27 11:21:37
|
Line 1
|
Line 1
|
#! /usr/bin/python | #! /usr/bin/env python |
# $Id$ |
# $Id$ |
# MiniUPnP project |
# MiniUPnP project |
# Author : Thomas Bernard |
# Author : Thomas Bernard |
# This Sample code is public domain. |
# This Sample code is public domain. |
# website : http://miniupnp.tuxfamily.org/ | # website : https://miniupnp.tuxfamily.org/ |
|
|
# import the python miniupnpc module |
# import the python miniupnpc module |
import miniupnpc |
import miniupnpc |
import socket |
import socket |
import BaseHTTPServer |
|
|
|
|
try: |
|
from http.server import BaseHTTPRequestHandler, HTTPServer |
|
except ImportError: |
|
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer |
|
|
# function definition |
# function definition |
def list_redirections(): |
def list_redirections(): |
i = 0 |
i = 0 |
Line 17 def list_redirections():
|
Line 21 def list_redirections():
|
p = u.getgenericportmapping(i) |
p = u.getgenericportmapping(i) |
if p==None: |
if p==None: |
break |
break |
print i, p | print(i, p) |
i = i + 1 |
i = i + 1 |
|
|
#define the handler class for HTTP connections |
#define the handler class for HTTP connections |
class handler_class(BaseHTTPServer.BaseHTTPRequestHandler): | class handler_class(BaseHTTPRequestHandler): |
def do_GET(self): |
def do_GET(self): |
self.send_response(200) |
self.send_response(200) |
self.end_headers() |
self.end_headers() |
self.wfile.write("OK MON GARS") | self.wfile.write(b"OK MON GARS") |
|
|
# create the object |
# create the object |
u = miniupnpc.UPnP() |
u = miniupnpc.UPnP() |
Line 37 u = miniupnpc.UPnP()
|
Line 41 u = miniupnpc.UPnP()
|
u.discoverdelay = 200; |
u.discoverdelay = 200; |
|
|
try: |
try: |
print 'Discovering... delay=%ums' % u.discoverdelay | print('Discovering... delay=%ums' % u.discoverdelay) |
ndevices = u.discover() |
ndevices = u.discover() |
print ndevices, 'device(s) detected' | print(ndevices, 'device(s) detected') |
|
|
# select an igd |
# select an igd |
u.selectigd() |
u.selectigd() |
# display information about the IGD and the internet connection |
# display information about the IGD and the internet connection |
print 'local ip address :', u.lanaddr | print('local ip address :', u.lanaddr) |
externalipaddress = u.externalipaddress() |
externalipaddress = u.externalipaddress() |
print 'external ip address :', externalipaddress | print('external ip address :', externalipaddress) |
print u.statusinfo(), u.connectiontype() | print(u.statusinfo(), u.connectiontype()) |
|
|
#instanciate a HTTPd object. The port is assigned by the system. |
#instanciate a HTTPd object. The port is assigned by the system. |
httpd = BaseHTTPServer.HTTPServer((u.lanaddr, 0), handler_class) | httpd = HTTPServer((u.lanaddr, 0), handler_class) |
eport = httpd.server_port |
eport = httpd.server_port |
|
|
# find a free port for the redirection |
# find a free port for the redirection |
Line 59 try:
|
Line 63 try:
|
eport = eport + 1 |
eport = eport + 1 |
r = u.getspecificportmapping(eport, 'TCP') |
r = u.getspecificportmapping(eport, 'TCP') |
|
|
print 'trying to redirect %s port %u TCP => %s port %u TCP' % (externalipaddress, eport, u.lanaddr, httpd.server_port) | print('trying to redirect %s port %u TCP => %s port %u TCP' % (externalipaddress, eport, u.lanaddr, httpd.server_port)) |
|
|
b = u.addportmapping(eport, 'TCP', u.lanaddr, httpd.server_port, |
b = u.addportmapping(eport, 'TCP', u.lanaddr, httpd.server_port, |
'UPnP IGD Tester port %u' % eport, '') |
'UPnP IGD Tester port %u' % eport, '') |
if b: |
if b: |
print 'Success. Now waiting for some HTTP request on http://%s:%u' % (externalipaddress ,eport) | print('Success. Now waiting for some HTTP request on http://%s:%u' % (externalipaddress ,eport)) |
try: |
try: |
httpd.handle_request() |
httpd.handle_request() |
httpd.server_close() |
httpd.server_close() |
except KeyboardInterrupt, details: | except KeyboardInterrupt as details: |
print "CTRL-C exception!", details | print("CTRL-C exception!", details) |
b = u.deleteportmapping(eport, 'TCP') |
b = u.deleteportmapping(eport, 'TCP') |
if b: |
if b: |
print 'Successfully deleted port mapping' | print('Successfully deleted port mapping') |
else: |
else: |
print 'Failed to remove port mapping' | print('Failed to remove port mapping') |
else: |
else: |
print 'Failed' | print('Failed') |
|
|
httpd.server_close() |
httpd.server_close() |
|
|
except Exception, e: | except Exception as e: |
print 'Exception :', e | print('Exception :', e) |