Estou tentando solucionar um problema em que só tenho o tcpdump disponível em um dispositivo. Eu quero usar o tcpdump para filtrar o tráfego da web e exibir apenas o tráfego que contém determinadas strings.
Eu faço o seguinte:
tcpdump -nei eth0 -X | grep "something interesting"
A saída é um hexview com 16 bytes de linha pr. Não consigo grep esses dados, pois os dados são apresentados em várias linhas.
Existe uma maneira do tcpdump apresentar os dados capturados em uma única linha? Isso tornaria possível usar o grep para encontrar pacotes interessantes.
linux
networking
tcpdump
O cão come o mundo do gato
fonte
fonte
tcpdump -nei eth0 -X | grep --line-buffered "something interesting"
fará, por razões não discernidas, minha resposta de trabalho válida foi excluída.Respostas:
Para pessoas como você, que não podem usar
ngrep
, eis como usarawk
para tornar atcpdump
saída do conteúdo do pacote aceitável.Primeiro, alguns exemplos de saída, conforme fornecido por
tcpdump -x
, para apresentar a tarefa a seguir:E este é o script de copiar e colar para o qual
awk
você pode canalizar a saídapara obter a seguinte saída grepable
Abaixo está uma versão comentada do script acima:
fonte
Na página de
tcpdump
manual:Certifique-se de usar também a
-s 0
opção para garantir que o pacote inteiro seja exibido.fonte
Você pode querer dar uma olhada no
ngrep
comando:ngrep -W single -d eth0 'regex to match' 'port 80'
Onde:
-W single
especifica a formatação de linha únicaregex to match
significa apenas despejar pacotes contendo determinada string.'port 80'
é um filtro pcap para cheirar apenas pacotes da ou para a porta 80fonte
A razão pela qual sua saída é hexadecimal é a
-X
bandeira. Experimentar:Você obterá a saída legível despejada diretamente no CLI.
fonte
Não consegui que o script awk fizesse o que eu queria e o ngrep não funcionaria em uma Ethernet sobre USB. Por isso, escrevi um pequeno programa C para juntar as linhas de saída do tcpdump para que sejam grepable. É em https://gitlab.com/dargaud/TcpDumpJoin
fonte