Gibt es einen generischen Befehlszeilen-HTTP-Proxy (wie Squid)?


9

Ich kann Netcat (oder Socat) problemlos verwenden, um den Datenverkehr zwischen meinem Browser und einem bestimmten Host: Port zu erfassen.

Gibt es unter Linux ein Befehlszeilen-Gegenstück zu einem Squid-ähnlichen HTTP-Proxy, mit dem ich den Datenverkehr zwischen meinem HTTP-Client (entweder Browser oder Befehlszeilenprogramm) und einem beliebigen Host: Port erfassen kann?


Antworten:


8

Sowohl Perl als auch Python (und wahrscheinlich auch Ruby) verfügen über einfache Kits, mit denen Sie schnell einfache HTTP-Proxys erstellen können.

Verwenden Sie in Perl HTTP :: Proxy . Hier ist das dreizeilige Beispiel aus der Dokumentation. Fügen Sie Filter hinzu, um Anforderungen oder Antworten zu filtern, zu protokollieren oder neu zu schreiben. Beispiele finden Sie in der Dokumentation.

use HTTP::Proxy;
my $proxy = HTTP::Proxy->new( port => 3128 );
$proxy->start;

Verwenden Sie in Python SimpleHTTPServer . Hier ist ein Beispielcode, der leicht von effbot angepasst wurde . Passen Sie die do_GETMethode (oder andere) an, um Anforderungen oder Antworten zu filtern, zu protokollieren oder neu zu schreiben.

import SocketServer
import SimpleHTTPServer
import urllib
class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):
    def do_GET(self):
        self.copyfile(urllib.urlopen(self.path), self.wfile)
httpd = SocketServer.ForkingTCPServer(('', 3128), Proxy)
httpd.serve_forever()

Ich glaube, das ist genau die Lösung, nach der ich gesucht habe. Vielen Dank.
Harry

Der Python hat für mich für HTTP-Anfragen funktioniert, scheint aber keine HTTPS-Anfragen zu unterstützen.
Russell Silva


6

Dies ist möglicherweise nicht die beste Lösung, aber wenn Sie einen Proxy verwenden, hat dieser eine bestimmte, host:portsodass die Netcat-Lösung weiterhin funktioniert, obwohl Sie die Proxy-Metadaten auseinander nehmen müssen, um einen Sinn daraus zu ziehen.

Der einfachste Weg, dies zu tun, könnte darin bestehen, einen beliebigen zufälligen Anonymisierungs-Proxy zu verwenden und einfach den gesamten Datenverkehr durchzuleiten netcat. (Stellen Sie also Ihren Browser-Proxy auf ein localhost:portund leiten Sie die Daten an den realen Proxy weiter.)

Wenn Sie einen lokalen Proxy haben möchten, ist ein SOCKS5-Proxy mit ssh -D <port> localhostwahrscheinlich die einfachste Option. Natürlich müssen Sie Ihrem Browser mitteilen, dass er einen "Socken" -Proxy anstelle eines "http" -Proxys verwenden soll.

Also so etwas (vorausgesetzt, Ihr lokaler Computer akzeptiert eingehende SSH-Verbindungen):

ssh -fN -D 8000 localhost
nc -l 8080 | tee capturefile | nc localhost 8000

Das funktioniert natürlich nur für einen Browserverbindungsversuch und wird dann beendet, und ich habe nicht versucht, die Rückgabedaten an den Browser weiterzuleiten, sodass Sie Ihre vollständige netcatLösung benötigen .


Vielen Dank. Haben Sie Namensvorschläge für Anonymisierungs-Proxys für Linux? Ich würde diejenigen bevorzugen, die nicht so schwer wie Squid sind (in Bezug auf Größe, Speicher, Startgeschwindigkeit), von einem Nichtbenutzer gestartet rootwerden können usw.
Harry

Außerdem bin ich Ihrem SOCKS5-Proxy-Beispiel nicht gefolgt. Könnten Sie bitte erklären, was mit den beiden obigen Aufrufen los ist? Ich weiß zB, dass ssh -fN -D ...ein SOCKS5-Proxy am localhostPort gestartet wird 8000, aber was macht nc -l ...das? Und auf welchen Port soll mein Browser zeigen: 8000oder 8080?
Harry

2
@harry für einen Anomyzations-Proxy werfen Sie einen Blick auf privoxy
Ulrich Dangel

1
Wenn ich "Anonymisierungs-Proxy" sage, meine ich damit nicht etwas, das Sie selbst eingerichtet haben: Ich meine einen vorhandenen Proxy im Internet. @UlrichDangel schlägt Privoxy vor und ich bin mir sicher, dass es auch andere gibt.
Ams

Die ncBefehle akzeptieren den gesamten Datenverkehr von Port 8080 und leiten ihn an 8000 weiter. Ich habe keine vollständige netcatLösung bereitgestellt, da in Ihrem Beitrag vorgeschlagen wurde, dass Sie bereits wissen, wie dieser Teil ausgeführt wird.
Ams
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.