Manque à implémenter une façon d'arrêter le script !!
1 #! /usr/bin/env python
2 #-*- coding: utf-8 -*-
3
4 import socket
5 import threading
6
7 class PipeThread(threading.Thread):
8 pipes = []
9 def __init__(self, sockInput, sockOutput, name):
10 threading.Thread.__init__(self)
11 self.setName(name)
12 self.pipes.append(self)
13 self.mydata = threading.local()
14 self.sockInput = sockInput
15 self.sockOutput = sockOutput
16
17 def run(self):
18 print self.getName(), "started !!"
19 while True:
20 try:
21 self.mydata.buffer = self.sockInput.recv(1024)
22 if not self.mydata.buffer:
23 break;
24 print self.getName(), " :", self.mydata.buffer[0:48]
25 self.sockOutput.send(self.mydata.buffer)
26 except KeyboardInterrupt:
27 sys.exit(0)
28 except:
29 break
30 print self.getName(), "ended !!"
31 self.sockInput.close()
32 self.sockOutput.close()
33 self.pipes.remove(self)
34
35
36 class PipeHole(threading.Thread):
37 def __init__(self, portInput, host, portOutput):
38 threading.Thread.__init__(self)
39 print "Redirecting : localhost:%s -> %s:%s" % (portInput, host, portOutput)
40 self.hostname = hostname
41 self.portOutput = portOutput
42 # Wait for incomings clients
43 self.sockMaster = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
44 self.sockMaster.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
45 self.sockMaster.bind(('', portInput))
46 self.sockMaster.listen(5)
47 print "Server is ready !!"
48
49 def run(self):
50 try:
51 while True:
52 # Accept a client connection
53 sockClient, addr = self.sockMaster.accept()
54 sRemote = socket.gethostbyaddr(addr[0])
55 print "Connection :", sRemote[0], sRemote[2] , ":", sockClient.getpeername()[1]
56 # Connect to server
57 sockServer = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
58 sockServer.connect((self.hostname, self.portOutput))
59 PipeThread(sockClient, sockServer, "Client").start()
60 PipeThread(sockServer, sockClient, "Server").start()
61 except KeyboardInterrupt:
62 sys.exit(0)
63 self.sockMaster.close()
64
65 if __name__ == '__main__':
66 import sys
67 try:
68 port = int(sys.argv[1])
69 hostname = sys.argv[2]
70 try:
71 new_port = int(sys.argv[3])
72 except IndexError:
73 new_port = port
74 except (IndexError, ValueError):
75 print "Usage: %s port hostname [new_port]" % sys.argv[0]
76 sys.exit(1)
77
78 try:
79 mainThread = PipeHole(port, hostname, new_port)
80 mainThread.start()
81 mainThread.join()
82 except KeyboardInterrupt:
83 sys.exit(0)
84
85 print "Shutting down !!"
86 #sys.exit(0)
version "minimaliste"
1 from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer
2
3 class MyServer(BaseHTTPRequestHandler):
4 def do_GET(self):
5 self.send_response(200, 'OK')
6 self.send_header('Content-type', 'text/html')
7 self.end_headers()
8 self.wfile.write( "hello" )
9
10 @staticmethod
11 def serve_forever(port):
12 HTTPServer(('', port), MyServer).serve_forever()
13
14 if __name__ == "__main__":
15 MyServer.serve_forever(8080)
Pages : 1