Simpler Proxy-Server

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
droptix
User
Beiträge: 521
Registriert: Donnerstag 13. Oktober 2005, 21:27

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!
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Was für ein Proxy? HTTP-Proxy? IRC-Proxy aka Bouncer? XMPP-Filetransfer-Proxy?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
droptix
User
Beiträge: 521
Registriert: Donnerstag 13. Oktober 2005, 21:27

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...
Leonidas
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
droptix
User
Beiträge: 521
Registriert: Donnerstag 13. Oktober 2005, 21:27

Die Links habe ich alle schon durch 8) 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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

droptix hat geschrieben:Die Links habe ich alle schon durch 8) Allerdings machen die dort vorgestellten Tools alle viel zu viel.
Auch der hier?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
droptix
User
Beiträge: 521
Registriert: Donnerstag 13. Oktober 2005, 21:27

Leonidas hat geschrieben:Auch der hier?
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`.

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.
droptix
User
Beiträge: 521
Registriert: Donnerstag 13. Oktober 2005, 21:27

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?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

droptix hat geschrieben:Ich sehe nirgends, dass die zusätzlichen Methoden aufgerufen werden! Ganz besonders komisch ist `do_CONNECT`.
Die Methoden werden vom BaseHTTPServer aufgerufen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
droptix
User
Beiträge: 521
Registriert: Donnerstag 13. Oktober 2005, 21:27

Suchen nach den Methodennamen brachte nix, aber das hier:

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()
Na, da kann man ja lange suchen! Danke für den Tipp, das bringt mich ein Stück weiter.
Antworten