diff options
-rw-r--r-- | lavaproxy/proxy.py | 39 | ||||
-rw-r--r-- | lavaproxy/socketserver.py | 7 | ||||
-rw-r--r-- | lavaproxy/test.py | 25 |
3 files changed, 69 insertions, 2 deletions
diff --git a/lavaproxy/proxy.py b/lavaproxy/proxy.py new file mode 100644 index 0000000..7b89bf5 --- /dev/null +++ b/lavaproxy/proxy.py @@ -0,0 +1,39 @@ +import socket +import sys +import thread +import time + + +class PortForwarder: + def __init__(self, host, listen_port, forward_port): + self.settings = int(listen_port), host, int(forward_port) + + def run(self): + thread.start_new_thread(self.server, self.settings) + # wait for <ctrl-c> + while True: + time.sleep(60) + + def server(self, *settings): + try: + dock_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + dock_socket.bind(('', settings[0])) + dock_socket.listen(5) + while True: + client_socket = dock_socket.accept()[0] + server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + server_socket.connect((settings[1], settings[2])) + thread.start_new_thread(self.forward, (client_socket, server_socket)) + thread.start_new_thread(self.forward, (server_socket, client_socket)) + finally: + thread.start_new_thread(self.server, settings) + + def forward(self, source, destination): + string = ' ' + while string: + string = source.recv(1024) + if string: + destination.sendall(string) + else: + source.shutdown(socket.SHUT_RD) + destination.shutdown(socket.SHUT_WR)
\ No newline at end of file diff --git a/lavaproxy/socketserver.py b/lavaproxy/socketserver.py index b490cac..38ce61d 100644 --- a/lavaproxy/socketserver.py +++ b/lavaproxy/socketserver.py @@ -22,6 +22,7 @@ import SocketServer import logging import socket from proxyexample import PortForwarder +from simpleproxyexample import SimpleForwarder import random import threading @@ -36,8 +37,10 @@ class PortForwardThread(threading.Thread): def run(self): logging.info("Starting Port Forward Thread: %s" % self.from_port) logging.info("Current Thread List: %s" % threading.enumerate()) - forwarder = PortForwarder('', self.from_port, (self.to_host, self.to_port)) - forwarder.main_loop() + forwarder = SimpleForwarder(self.to_host, self.from_port, self.to_port) + forwarder.listen() + #forwarder = PortForwarder('', self.from_port, (self.to_host, self.to_port)) + #forwarder.main_loop() class ListenerServer(object): servers = [] diff --git a/lavaproxy/test.py b/lavaproxy/test.py new file mode 100644 index 0000000..fc36e59 --- /dev/null +++ b/lavaproxy/test.py @@ -0,0 +1,25 @@ +from proxy import PortForwarder +import logging +import threading + + +class PortForwardThread(threading.Thread): + def __init__(self, from_port, to_host, to_port): + super(PortForwardThread, self).__init__() + self.from_port = from_port + self.to_host = to_host + self.to_port = to_port + + def run(self): + logging.info("Starting Port Forward Thread: %s" % self.from_port) + logging.info("Current Thread List: %s" % threading.enumerate()) + forwarder = PortForwarder(self.to_host, self.from_port, self.to_port) + forwarder.run() + +if __name__ == "__main__": + thread1 = PortForwardThread(8080, '192.168.1.1', 22) + thread1.start() + print 'Thread 1 Launched!' + thread2 = PortForwardThread(8081, '192.168.1.1', 80) + thread2.start() + print 'Thread 2 Launched!'
\ No newline at end of file |