Dumping rawdata para um host em um proxy usando tcpdump

3

Estou tentando salvar os dados brutos que estão sendo enviados através de nosso proxy para um URL específico. Um amigo meu me deu a dica para usar o tcpdump, então comecei a ler sobre isso na página deles. Mas, por algum motivo, não consigo usá-lo.

Eu tentei ' tcpdump -c10 host my.very.specific.host.com ' Mas eu não recebo nenhuma correspondência. E sim =) eu posso ver que há algum tipo de ação do cliente no server.log.

Se eu usar ' tcpdump -c10 ', recebo 10 linhas instantaneamente. Então eu acho que sinto falta de entender o conceito de 'host'?

Não consigo apontar para um IP, já que é um servidor da Web que lida com vários URLs diferentes.

Este não é realmente o meu domínio (programador) então, por favor, desculpe a minha pergunta simples :) Agradecemos antecipadamente.

EDIT 1

Obrigado por toda a ajuda, e sim. Eu deveria ter declarado minha pergunta com mais clareza. Então, aqui estão algumas informações "mais". O que eu quero fazer é capturar os dados que vão do nosso proxy para um celular.

O motivo de eu estar fazendo isso é ter certeza de que enviamos exatamente o que queremos antes de sair para o 'wildness do gateway / proxy do operador móvel' (Sim, eles tendem a modificar as coisas mais do que deveriam;)

A informação que me interessa é o protocolo http.

Então, o que farei agora é tentar descartar as informações que estão entre nosso proxy e o gateway da operadora móvel na NIC 'pública'. Felizmente para mim, a operadora de celular só tem um gateway público.

Mais e mais!

    
por Carl Bergquist 26.06.2009 / 13:31

6 respostas

6

Você pode ter um problema com diferentes interfaces. Por padrão, o tcpdump só escuta na primeira interface ethernet encontrada. Se você adicionar "-i any", ele escutará em todas as interfaces.

Como alguém já mencionou, você acabará capturando todo o tráfego para um determinado endereço IP, independentemente do nome do DNS que você deseja. Você pode reduzir a quantidade de dados capturados restringindo ainda mais o filtro. Você pode adicionar uma porta e especificar um host ou uma rede remota específica.

# tcpdump host 12.34.56.78 and port 80 and net 78.65.43.21/24 

Você pode achar que o tcpflow é mais útil para você. Ele irá despejar cada lado de uma conexão TCP em um arquivo separado. Você pode usá-lo com o mesmo filtro que você usaria com o tcpdump, ou você pode carregar um arquivo pcap. Para salvar um arquivo pcap, execute:

# tcpdump -s 0 -w /tmp/dump.pcap -i any host 12.34.56.78 and port 80
    
por 26.06.2009 / 13:48
3

Vou tentar dizer o que LapTop006 disse, mas um pouco diferente.

Quando você executa esse comando tcpdump -c10 host my.very.specific.host.com , o tcpdump está resolvendo "my.very.specific.host.com" para um endereço IP e filtrando tráfego para esse IP. Se o DNS retornar vários endereços IP para "my.very.specific.host.com", o tcpdump só receberá o primeiro IP retornado e filtrará esse IP.

Se houver apenas alguns IPs retornados para "" my.very.specific.host.com ", você poderá fazer:

tcpdump -c10 host 1.2.3.4 or host 2.3.4.5 or host 3.4.5.6

Seria mais fácil capturar o tráfego entre o cliente e o proxy do que entre o servidor da Web remoto e o proxy, já que o cliente tem apenas um endereço IP. (Eu suponho que se o que você está tentando ver é a interação entre o servidor web remoto e o proxy, você precisa capturar isso. Seu post não me dá o suficiente para continuar ...)

    
por 26.06.2009 / 13:47
1

Eu tentaria o endereço IP (interno) como argumento para HOST .

a propósito, aqui está um tutorial link e um cholha de apresentação (PDF ) com todas as opções.

    
por 26.06.2009 / 13:40
0

tcpdump sempre funciona na camada IP, mesmo se você der um nome DNS, ele simplesmente o resolve para um IP

Você pode usar o endereço do cliente como o host a ser considerado.

O próximo passo é começar a capturar pacotes completos para um arquivo "pcap" que o wireshark pode abrir para análise completa.

    
por 26.06.2009 / 13:40
0

Além do que os outros disseram - use IP, interface correta, dump para pcap.

Aconselho-o a eliminar o sinal -c10 . Isso instrui tcpdump a sair depois de receber exatamente 10 pacotes e isso pode não ser suficiente para o que você deseja ver.

    
por 26.06.2009 / 13:49
0

Você deseja executar o tcpdump na máquina que atende as páginas da web. Não use um endereço de host; você estará capturando tráfego apenas para esse host. Você deseja capturar em um arquivo tudo na porta 80 e deseja certificar-se de capturar todos os dados, sem truncá-los. O comando que você quer é:

sudo tcpdump -w log.pcap -s 65535 port 80

Se sua máquina tiver várias interfaces Ethernet, talvez seja necessário especificar o que usar para capturar o tráfego. Se você perceber que não está capturando nenhum tráfego, use ifconfig -a para ver a lista de interfaces e seus endereços, escolha o apropriado e adicione as opções -i eth1 (ou qualquer outra interface) à linha de comando.

Depois de ter um arquivo pcap, você precisa analisá-lo. Para uso interativo, o Wireshark é uma excelente ferramenta. Copie o arquivo pcap para sua estação de trabalho e execute wireshark -r log.pcap . Você pode usar os filtros para encontrar os pacotes que possuem cabeçalhos "Host: some.server.of.interest.com"; esses são os únicos para o host virtual de interesse. Analisar / seguir o TCP Stream mostrará toda a conversação HTTP em um formato muito legível.

Se você quiser fazer uma análise automatizada, provavelmente precisará escrever algum código personalizado. Uma opção seria usar uma ferramenta como tcpflow para despejar todas as sessões HTTP em arquivos, e em seguida, use uma linguagem de script (ou até mesmo o grep) para selecionar os arquivos de interesse e analisá-los. Também não é difícil ler arquivos pcap diretamente, mas fazer remontagem das conversas TCP é muito mais trabalhoso.

    
por 26.06.2009 / 14:05

Tags