Würde gern den Netzwerkverkehr einer Anwendung mit-sniffen und müsste den Datenverkehr auswerten. Es handelt sich um ein Tool, das sich mit einem Drucker im Netzwerk verbindet, dort die Seriennummer sowie Zählerstände abfragt und das Ganze an einen Server im Internet schickt.
Man hat die Möglichkeit, im Tool einen Proxy-Server anzugeben. Ich würde gern die gesendeten Daten (Seriennummer, Zählerstände) zusätzlich an einen zweiten Server schicken.
Ich brauche also einen absolut minimalistischen Proxy-Server. Hat jmd. ein kurzes Code-Snippet für mich? Ohne zusätzlichen Schnick-Schnack? Danke!
Simpler Proxy-Server
Ich weiß, dass das Tool standardmäßig die Proxy-Einstellungen vom MS Internet Explorer übernimmt, also gehe ich von einem HTTP-Proxy aus.
Der Python-Proxy soll alles durchlassen, sich quasi nur auf die Leitung hängen und horchen, was an den Server übertragen wird. Sollten ja HTTP-Requests sein...
Der Python-Proxy soll alles durchlassen, sich quasi nur auf die Leitung hängen und horchen, was an den Server übertragen wird. Sollten ja HTTP-Requests sein...
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Dann schau dir diese Liste an, dort sind viele Proxies. Alternativ auch HTTP Ripper.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Die Links habe ich alle schon durch
Allerdings machen die dort vorgestellten Tools alle viel zu viel. Der HTTP Ripper kommt mit einer GUI und Installationsroutine. Der Rest hat eingebaute Filter und Blocker... für mich zu viel.
Habe mir von einigen den SourceCode angeschaut. Das Problem ist, dass ich nicht durchsehe, was minimal nötig ist und wie das prinzipiell funktioniert. Ich möchte es gern verstehen.
Es scheint darum zu gehen, den BaseHTTPServer zu verwenden und den HTTPRequestHandler zu benutzen, um Daten mitzulesen. Für mich interessant: welche Funktionen dort drin welche Aufgaben haben.

Habe mir von einigen den SourceCode angeschaut. Das Problem ist, dass ich nicht durchsehe, was minimal nötig ist und wie das prinzipiell funktioniert. Ich möchte es gern verstehen.
Es scheint darum zu gehen, den BaseHTTPServer zu verwenden und den HTTPRequestHandler zu benutzen, um Daten mitzulesen. Für mich interessant: welche Funktionen dort drin welche Aufgaben haben.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Auch der hier?droptix hat geschrieben:Die Links habe ich alle schon durchAllerdings machen die dort vorgestellten Tools alle viel zu viel.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Ja, wirklich alle. Der TinyHTTPPRoxy wird sehr häufig referenziert. Ich sehe dort nicht ganz durch. Es werden Kleinigkeiten gemacht, die komisch und nicht kommentiert sind. Ich verstehe nicht, was dort drin abgeht, z.b. in `_read_write`.Leonidas hat geschrieben:Auch der hier?
Ich bräuchte zum besseren Verständnis ein absolut minimalistisches Beispiel Script, das den gesamten Datenverkehr durchlässt und für ein- und ausgehenden Verkehr einfach nix weiter als ein `print` macht -> quasi sagen was über die Leitung rein und raus geht. Ich stelle mir das wesentlich kürzer vor.
Ich hab mir nochmal intensiv Zeit genommen um zu versuchen den TinyHTTPProxy zu verstehen:
Der `ProxyHandler` ist abgeleitet von `BaseHTTPServer.BaseHTTPRequestHandler`. Außer `handle` (wird nur zum Filtern verwendet) sind alle dort drin definierten Methoden nicht vom BaseHTTPRequestHandler übernommen und überschrieben, sondern zusätzlich definiert: _connect_to, do_CONNECT, do_GET und _read_write.
Da keine der Methoden vom BaseHTTPRequestHandler stammt, wird auch keine von der BaseClass aufgerufen, auch nicht durch die `test` Funktion.
Ganz unten wird 4x nacheinander do_GET referenziert, und zwar für do_HEAD, do_POST, do_PUT und do_DELETE. Aber auch diese Variablen werden von der BaseClass und auch nicht vom HTTPServer oder seinen BaseClasses (BaseServer, SocketServer, TCPServer) nicht verwendet.
Ich sehe nirgends, dass die zusätzlichen Methoden aufgerufen werden! Ganz besonders komisch ist `do_CONNECT`. Was übersehe ich?
Der `ProxyHandler` ist abgeleitet von `BaseHTTPServer.BaseHTTPRequestHandler`. Außer `handle` (wird nur zum Filtern verwendet) sind alle dort drin definierten Methoden nicht vom BaseHTTPRequestHandler übernommen und überschrieben, sondern zusätzlich definiert: _connect_to, do_CONNECT, do_GET und _read_write.
Da keine der Methoden vom BaseHTTPRequestHandler stammt, wird auch keine von der BaseClass aufgerufen, auch nicht durch die `test` Funktion.
Ganz unten wird 4x nacheinander do_GET referenziert, und zwar für do_HEAD, do_POST, do_PUT und do_DELETE. Aber auch diese Variablen werden von der BaseClass und auch nicht vom HTTPServer oder seinen BaseClasses (BaseServer, SocketServer, TCPServer) nicht verwendet.
Ich sehe nirgends, dass die zusätzlichen Methoden aufgerufen werden! Ganz besonders komisch ist `do_CONNECT`. Was übersehe ich?
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Die Methoden werden vom BaseHTTPServer aufgerufen.droptix hat geschrieben:Ich sehe nirgends, dass die zusätzlichen Methoden aufgerufen werden! Ganz besonders komisch ist `do_CONNECT`.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Suchen nach den Methodennamen brachte nix, aber das hier:
Na, da kann man ja lange suchen! Danke für den Tipp, das bringt mich ein Stück weiter.
Code: Alles auswählen
def handle_one_request(self):
"""Handle a single HTTP request.
You normally don't need to override this method; see the class
__doc__ string for information on how to handle specific HTTP
commands such as GET and POST.
"""
self.raw_requestline = self.rfile.readline()
if not self.raw_requestline:
self.close_connection = 1
return
if not self.parse_request(): # An error code has been sent, just exit
return
mname = 'do_' + self.command
if not hasattr(self, mname):
self.send_error(501, "Unsupported method (%r)" % self.command)
return
method = getattr(self, mname)
method()