Eu tentei isso:
tcpdump -s 1500 -A -l -i eth0 '(port 6667) and (length > 74)'
Eu preciso apenas da parte ascii disso. Como faço para remover o resto?
Eu tentei isso:
tcpdump -s 1500 -A -l -i eth0 '(port 6667) and (length > 74)'
Eu preciso apenas da parte ascii disso. Como faço para remover o resto?
Respostas:
Como Josh sugere, o tcpflow pode imprimir apenas os dados do pacote TCP em um arquivo ou STDOUT. Você pode canalizar o tcpdump para o tcpflow assim:
tcpdump -i lo -l -w - port 23 | tcpflow -C -r -
Para visualizar apenas um lado da conversa, você pode usar filtros para o tcpdump, por exemplo dst port 23.
tcpflowcomo root?
Não tenho certeza sobre a sintaxe exata de tcpdump... de fato, marquei esta pergunta como favorita porque gostaria de saber! Mas como uma solução alternativa, você pode tentar usar tcpflow. Funciona essencialmente da mesma maneira, mas imprime muito melhor a saída ASCII; ele excluiu os cabeçalhos e imprimiu os pacotes sequencialmente como um fluxo, por isso é mais fácil ler e seguir às vezes do que tcpdump.
Eu sinto que a solução mais elegante é apenas abandonar o tcpdump. Nenhum tubo de qualquer tipo:
tcpflow -c port 6667
E é isso.
Uma maneira rápida e suja de fazer isso é filtrar a saída através de strings:
tcpdump -nli eth0 '(port 6667) and (length > 74)' -s 0 -w - | strings
Às vezes, você não tem outras ferramentas e, para dar uma olhada rápida na carga, isso é suficiente. Não é bom se você precisar da carga exata para injeção ou de uma análise exata, é claro.
Se você precisar apenas da parte ASCII, poderá usar: tcpdump -s 1500 -A -l -i eth0 '(port 6667) and (length > 74)'|sed 's/\.//g'ou com o ngrep:ngrep -d eth0 -lq . '(port 6667) and (length > 74)' |sed -rn '/^ /s/\.//gp'