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.
lg
roschi