Seite 1 von 1

Circuit Level Proxy

Verfasst: Mittwoch 24. Dezember 2008, 20:46
von roschi
hallo!

ich suche nach einer moeglichkeit einen Circuit Level Proxy in python zu realisieren.

der proxy soll nur pakete (egal was fuer ein protokoll) entgegen nehmen und weiterreichen und die antwort eben wieder zurueckgeben. ich brauche keine paket-modifizierung und aenlichen schnickschnack.

vielleicht kennt ja jemand von euch auch schon eine solche implementierung in python...

ich wuerde mich ueber hilfe, denkanstoeße und code sehr frreuen!

lg
roschi

Verfasst: Donnerstag 25. Dezember 2008, 01:24
von roschi
ich glaube, ich habe einen ansatz gefunden:

Code: Alles auswählen

import SocketServer, select, socket, threading

class ConnectionHandler(SocketServer.BaseRequestHandler):
  BUFFERSIZE = 2**12

  def handle(self):
    src = self.request
    dest = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # hier brauch ich das verbindungsziel
    dest.connect((dest_ip_of_src, dest_port_of_src))
    pairs = {src:dest, dest:src}
    while pairs:
      read = select.select(pairs.keys(), [], [])[0]
      for s in read:
        data = s.recv(self.BUFFERSIZE)
        if data:
          pairs[s].sendall(data)
        else:
          pairs[s].shutdown(socket.SHUT_WR)
          s.shutdown(socket.SHUT_RD)
          del pairs[s]
    dest.close()

class Proxy(threading.Thread):
  def __init__(self, addr):
    threading.Thread.__init__(self)
    self.addr = addr

  def run(self):
    server = SocketServer.ThreadingTCPServer(self.addr, ConnectionHandler)
    server.serve_forever()

def start_proxy(addr):
  """start_proxy(address)
      Starts a proxy and binds it to ``address``"""
  p = Proxy(addr)
  p.setDaemon(1)
  p.start()

if __name__ == "__main__":
  print "Starting proxy at 0.0.0.0:8000"
  start_proxy(("", 8000))
  threading.Event().wait()
das funktioniert auch soweit schon ganz gut...
aber wie soll ich nun rausfinden, an welche addresse die pakete geschickt wurden, um dann bei jeder verbindung zu entscheiden, was der kommunikationspartner ist? dazu muesste ich doch die pakete irgendwie "auslesen"?

lg
roschi

PS: der proxy muss unter windows laufen.

Verfasst: Freitag 26. Dezember 2008, 09:53
von roschi
ich glaube, ich hatte ein brett vorm kopf!

es ist doch eigendlich logisch, dass ich nicht einfach den paket-header auslesen kann, da dort ja nur meine eigene ip als ziel stehen wird!

:(

ich glaube, was ich will, ist ein router! :)
naja, jedenfalls hat sich mein problem damit ja eigendlich erledigt. :D

lg
roschi