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
Circuit Level Proxy
- roschi
- User
- Beiträge: 225
- Registriert: Samstag 29. März 2008, 18:58
- Wohnort: Thueringen, Deutschland
- Kontaktdaten:
ich glaube, ich habe einen ansatz gefunden:
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.
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()
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]
- roschi
- User
- Beiträge: 225
- Registriert: Samstag 29. März 2008, 18:58
- Wohnort: Thueringen, Deutschland
- Kontaktdaten:
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.
lg
roschi
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.

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]