Circuit Level Proxy

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

Mittwoch 24. Dezember 2008, 20:46

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
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

Donnerstag 25. Dezember 2008, 01:24

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.
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

Freitag 26. Dezember 2008, 09:53

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
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
Antworten