From 70a167c29838056e20c9a0efa441d2539b17227f Mon Sep 17 00:00:00 2001 From: Matt Hart Date: Fri, 18 Apr 2014 18:06:28 +0100 Subject: Latest push --- lavaproxy/proxyexample.py | 13 +++++++------ lavaproxy/socketserver.py | 13 ++++++++++++- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/lavaproxy/proxyexample.py b/lavaproxy/proxyexample.py index e11a4a0..029901a 100644 --- a/lavaproxy/proxyexample.py +++ b/lavaproxy/proxyexample.py @@ -14,7 +14,7 @@ import sys # But when buffer get to high or delay go too down, you can broke things buffer_size = 4096 delay = 0.0001 -forward_to = ('smtp.zaz.ufsk.br', 25) + class Forward: def __init__(self): @@ -28,15 +28,16 @@ class Forward: print e return False -class TheServer: +class PortForwarder: input_list = [] channel = {} - def __init__(self, host, port): + def __init__(self, host, port, forward_to): self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.server.bind((host, port)) self.server.listen(200) + self.forward_to = forward_to def main_loop(self): self.input_list.append(self.server) @@ -56,7 +57,7 @@ class TheServer: self.on_recv() def on_accept(self): - forward = Forward().start(forward_to[0], forward_to[1]) + forward = Forward().start(self.forward_to[0], self.forward_to[1]) clientsock, clientaddr = self.server.accept() if forward: print clientaddr, "has connected" @@ -86,11 +87,11 @@ class TheServer: def on_recv(self): data = self.data # here we can parse and/or modify the data before send forward - print data + #print data self.channel[self.s].send(data) if __name__ == '__main__': - server = TheServer('', 9090) + server = PortForwarder('', 41001, ('192.168.1.1', 22)) try: server.main_loop() except KeyboardInterrupt: diff --git a/lavaproxy/socketserver.py b/lavaproxy/socketserver.py index a678207..0dd2f44 100644 --- a/lavaproxy/socketserver.py +++ b/lavaproxy/socketserver.py @@ -21,6 +21,8 @@ import SocketServer import logging import socket +from proxyexample import PortForwarder +import random class ListenerServer(object): servers = [] @@ -29,6 +31,7 @@ class ListenerServer(object): logging.getLogger().name = "ManagementServer" logging.getLogger().setLevel(config["logging_level"]) self.management_server = TCPServer((config["hostname"], config["mgmt-port"]), TCPRequestHandler) + self.management_server.config = config # for portnum in range(config["port-start"], config["port-end"]): # self.servers.append(TCPServer((config["hostname"], portnum), TCPRequestHandler)) # logging.info("listening on %s:%s" % (config["hostname"], portnum)) @@ -55,7 +58,15 @@ class TCPRequestHandler(SocketServer.BaseRequestHandler): logging.debug("Unable to resolve: %s error: %s" % (ip, e)) request_host = ip logging.info("Received a request from %s: '%s'" % (request_host, data)) - self.request.sendall("ack\n") + ####### setup the port forward here + from_port = random.randint(self.server.config["port-start"], self.server.config["port-end"]) + to_port = 22 + to_host = "192.168.1.1" + logging.debug("Starting port forwarding from %s to %s:%s" % (from_port,to_host,to_port)) + self.request.sendall("ack %s\n" % from_port) + forwarder = PortForwarder('', from_port, (to_host, to_port)) + forwarder.main_loop() + except Exception as e: logging.debug(e) self.request.sendall("nack\n") -- cgit v1.2.3