Esiste un proxy HTTP generico da riga di comando (come Squid)?


9

Posso facilmente usare Netcat (o, Socat) per catturare il traffico tra il mio browser e un host specifico: port.

Ma per Linux esiste una controparte da riga di comando di un proxy HTTP simile a Squid che posso usare per catturare il traffico tra il mio client HTTP (browser o programma da riga di comando) e qualsiasi host arbitrario: porta?


Risposte:


8

Sia Perl che Python (e probabilmente anche Ruby) hanno dei semplici kit che puoi usare per creare rapidamente semplici proxy HTTP.

In Perl, utilizzare HTTP :: Proxy . Ecco l'esempio di 3 righe della documentazione. Aggiungi filtri per filtrare, registrare o riscrivere richieste o risposte; vedere la documentazione per esempi.

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

In Python, usa SimpleHTTPServer . Ecco alcuni esempi di codice leggermente adattati da effbot . Adatta il do_GETmetodo (o altri) per filtrare, registrare o riscrivere richieste o risposte.

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()

Credo che questo sia esattamente il tipo di soluzione che stavo cercando. Grazie.
Harry,

Quello di Python ha funzionato per me per le richieste HTTP ma non sembra supportare le richieste HTTPS.
Russell Silva,


6

Questa potrebbe non essere la soluzione migliore, ma se usi un proxy allora avrà uno specifico, host:portquindi la soluzione netcat con funzionerà ancora, anche se dovrai separare i metadati del proxy per dargli un senso.

Il modo più semplice per farlo potrebbe essere quello di utilizzare qualsiasi proxy di anonimizzazione casuale là fuori e semplicemente canalizzare tutto il traffico netcat. (Vale a dire, impostare il proxy del browser su localhost:porte quindi inoltrare i dati al proxy reale.)

Se vuoi avere un proxy locale, allora un proxy SOCKS5 con ssh -D <port> localhostè probabilmente l'opzione più semplice. Ovviamente, devi dire al tuo browser di utilizzare un proxy "socks" anziché un proxy "http".

Quindi, qualcosa del genere (supponendo che il tuo computer locale accetti connessioni ssh in entrata):

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

Naturalmente, funzionerà solo per un tentativo di connessione al browser, quindi uscirà e non ho tentato di inoltrare i dati di ritorno al browser, quindi avrai bisogno della tua netcatsoluzione completa .


Grazie. Hai suggerimenti di nome per i proxy di anonimizzazione per Linux? Preferirei quelli che non sono così pesanti come Squid (in termini di dimensioni, memoria, velocità di avvio), sono avviabili da un non rootutente, ecc.
Harry,

Inoltre, non ho seguito il tuo esempio di proxy SOCKS5. Potresti spiegare cosa sta succedendo con le 2 invocazioni sopra? Ad esempio, so che ssh -fN -D ...avvia un proxy SOCKS5 sulla localhostporta 8000, ma cosa fa nc -l ...? E a quale porta devo puntare il mio browser: 8000o 8080?
Harry,

2
@harry per un proxy di anomalia dai un'occhiata a privoxy
Ulrich Dangel

1
Quando dico "proxy di anonimizzazione" non intendo qualcosa che hai impostato tu: intendo un proxy esistente là fuori in rete. @UlrichDangel suggerisce privoxy e sono sicuro che ce ne sono anche altri.
AMS

I nccomandi accettano tutto il traffico dalla porta 8080 e lo inoltrano a 8000. Non ho fornito una netcatsoluzione completa perché il tuo post ha suggerito che già sapevi come fare quella parte.
AMS
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.