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

9

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

Mas, para Linux, existe algum equivalente na linha de comando de um proxy HTTP do tipo Squid que eu possa usar para capturar o tráfego entre meu cliente HTTP (navegador ou programa de linha de comando) e qualquer host arbitrário: port?

atormentar
fonte
Relacionados: Linux, simples proxy HTTP
Piotr Dobrogost

Respostas:

8

O Perl e o Python (e provavelmente o Ruby também) têm kits simples que você pode usar para criar rapidamente proxies HTTP simples.

No 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;

No Python, use o SimpleHTTPServer . Aqui está um exemplo de código levemente adaptado do effbot . Adapte o do_GETmétodo (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()
Gilles 'SO- parar de ser mau'
fonte
Acredito que esse é exatamente o tipo de solução que eu estava procurando. Obrigado.
Harry
O Python funcionou para mim para solicitações HTTP, mas parece não suportar solicitações HTTPS.
Russell Silva
6

Essa pode não ser a melhor solução, mas se você usar algum proxy, ele terá um específico, de host:portmodo que a solução netcat ainda funcione, embora você precise separar os metadados do proxy para entendê-lo.

A maneira mais fácil de fazer isso pode ser usar qualquer proxy de anonimização aleatório por aí e canalizar todo o tráfego netcat. (Ou seja, defina o proxy do navegador para localhost:porte encaminhe os dados para o proxy real.)

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

Então, algo como isto (supondo que sua máquina local aceite conexões ssh recebidas):

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

Naturalmente, isso funcionará apenas para uma tentativa de conexão do navegador e, em seguida, saia, e eu não tentei encaminhar os dados de retorno para o navegador, portanto, você precisará de sua netcatsolução completa .

ams
fonte
Obrigado. Você tem alguma sugestão de nome para proxies de anonimização para Linux? Eu preferiria aqueles que não são tão pesado como Squid (em termos de tamanho, memória, velocidade de inicialização), são inicializável por um não- rootusuário, etc.
Harry
Além disso, não segui seu exemplo de proxy SOCKS5. Você poderia explicar o que está acontecendo com as duas invocações acima? Eu, por exemplo, sei que ssh -fN -D ...inicia um proxy SOCKS5 na localhostporta 8000, mas o que nc -l ...faz? E para qual porta devo apontar meu navegador para: 8000ou 8080?
Harry
2
@harry para um proxy anomyzation ter um olhar para privoxy
Ulrich Dangel
1
Quando digo "proxy de anonimização", não quero dizer algo que você mesmo criou: quero dizer um proxy existente na rede. @UlrichDangel sugere privoxy e tenho certeza que existem outros também.
AMS
Os nccomandos aceitam todo o tráfego da porta 8080 e encaminham para 8000. Não forneci uma netcatsolução completa porque sua postagem sugeria que você já sabia como fazer essa parte.
AMS