¿Hay algún proxy HTTP genérico de línea de comandos (como Squid)?

9

Puedo usar fácilmente Netcat (o Socat) para capturar el tráfico entre mi navegador y un host específico: puerto.

Pero para Linux, ¿existe alguna contraparte de línea de comando de un proxy HTTP similar a Squid que pueda usar para capturar el tráfico entre mi cliente HTTP (ya sea navegador o programa de línea de comando) y cualquier host arbitrario: puerto?

Harry
fuente
Relacionado: Linux, proxy HTTP simple
Piotr Dobrogost

Respuestas:

8

Tanto Perl como Python (y probablemente también Ruby) tienen kits simples que puedes usar para construir rápidamente proxies HTTP simples.

En Perl, use HTTP :: Proxy . Aquí está el ejemplo de 3 líneas de la documentación. Agregue filtros para filtrar, registrar o reescribir solicitudes o respuestas; Consulte la documentación para ver ejemplos.

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

En Python, use SimpleHTTPServer . Aquí hay un código de muestra ligeramente adaptado de effbot . Adapte el do_GETmétodo (u otros) para filtrar, registrar o reescribir solicitudes o respuestas.

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()
Gilles 'SO- deja de ser malvado'
fuente
Creo que este es exactamente el tipo de solución que estaba buscando. Gracias.
Harry
El Python funcionó para mí para solicitudes HTTP, pero no parece admitir solicitudes HTTPS.
Russell Silva
@RussellSilva Pruebe piware.de/2011/01/creating-an-https-server-in-python o gist.github.com/dergachev/7028596
Gilles 'SO- deja de ser malvado'
6

Puede que esta no sea la mejor solución, pero si usa algún proxy, tendrá una host:portsolución específica para que la solución de netcat siga funcionando, aunque tendrá que separar los metadatos del proxy para darle sentido.

La forma más fácil de hacer esto podría ser usar cualquier proxy de anonimato aleatorio y simplemente canalizar todo el tráfico netcat. (Es decir, configure el proxy de su navegador localhost:porty luego envíe los datos al proxy real).

Si desea tener un proxy local, entonces un proxy SOCKS5 ssh -D <port> localhostes probablemente su opción más fácil. Obviamente, debe decirle a su navegador que use un proxy "calcetines" en lugar de un proxy "http".

Entonces, algo como esto (suponiendo que su máquina local acepte conexiones ssh entrantes):

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

Naturalmente, eso solo funcionará para un intento de conexión del navegador, y luego saldrá, y no he intentado reenviar los datos devueltos al navegador, por lo que necesitará su netcatsolución completa .

ams
fuente
Gracias. ¿Tiene alguna sugerencia de nombre para proxies de anonimato para Linux? Yo preferiría que los que no son tan pesado como el calamar (en términos de tamaño, la memoria, la velocidad de arranque), son iniciable por un no rootusuario, etc.
Harry
Además, no seguí tu ejemplo de proxy SOCKS5. ¿Podría explicar qué está sucediendo con las 2 invocaciones anteriores? Yo, por ejemplo, sé que ssh -fN -D ...inicia un proxy SOCKS5 en el localhostpuerto 8000, pero ¿qué hace nc -l ...? Y, ¿a qué puerto debo hacer que mi navegador señale: 8000o 8080?
Harry
2
@harry para un proxy de anomización echa un vistazo a la privoxy
Ulrich Dangel
1
Cuando digo "proxy de anonimato" no me refiero a algo que usted mismo configuró: me refiero a un proxy existente en la red. @UlrichDangel sugiere privoxy y estoy seguro de que también hay otros.
enms
Los nccomandos aceptan todo el tráfico desde el puerto 8080 y lo reenvían a 8000. No proporcioné una netcatsolución completa porque su publicación sugirió que ya sabía cómo hacer esa parte.
enms