Existe algum proxy HTTP genérico da linha de comandos (como o Squid)?

8

Eu posso facilmente usar o Netcat (ou Socat) para capturar tráfego entre o meu navegador e um host específico: porta.

Mas, para o Linux, existe alguma contraparte de linha de comando de um proxy HTTP semelhante ao Squid que eu possa usar para capturar tráfego entre meu cliente HTTP (navegador ou programa de linha de comando) e qualquer host arbitrário: port? / p>     

por Harry 17.05.2012 / 14:51

2 respostas

7

Tanto o Perl quanto o Python (e provavelmente o Ruby também) possuem kits simples que você pode usar para construir rapidamente proxies HTTP simples.

Em Perl, use HTTP :: Proxy . Aqui está o exemplo de 3 linhas da documentação. Adicione filtros para filtrar, registrar ou reescrever solicitações ou respostas; veja a documentação para exemplos.

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

Em Python, use SimpleHTTPServer . Aqui está um exemplo de código ligeiramente adaptado do effbot . Adapte o método do_GET (ou outros) para filtrar, registrar ou reescrever solicitações ou respostas.

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()
    
por 18.05.2012 / 03:10
6

Esta pode não ser a melhor solução, mas se você usar qualquer proxy, ela terá um host:port específico, então a solução netcat ainda funcionará, embora você tenha que separar o meta-dados proxy para entender isso.

A maneira mais fácil de fazer isso é usar qualquer proxy de anonimização aleatório e canalizar todo o tráfego por meio de netcat . (Por exemplo, defina o proxy do seu navegador para localhost:port e, em seguida, encaminhe os dados para o proxy real.)

Se você deseja ter um proxy local, um proxy SOCKS5 com ssh -D <port> localhost é provavelmente sua opção mais fácil. Obviamente, você precisa dizer ao seu navegador para usar um proxy "socks" em vez de um proxy "http".

Então, algo assim (assumindo que sua máquina local aceita conexões ssh de entrada):

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

Naturalmente, isso só funcionará para uma tentativa de conexão do navegador e, em seguida, sairá, e eu não tentei encaminhar os dados de retorno para o navegador, portanto, você precisará da solução netcat completa.

    
por 17.05.2012 / 15:47