"tcpdump" para capturar os últimos pacotes

"tcpdump" para capturar os últimos pacotes

Estou monitorando uma determinada porta, pois minha aplicação utiliza essa porta, parece que a conexão cai em momentos aleatórios, quero ver quais são os últimos pacotes passando antes da conexão cair: usei essa linha

 sudo tcpdump -XX -i eth0 port 3050 | tail  >> tcpamir.txt

mas para funcionar tenho que iniciar outro terminal e emitir

sudo killall tcpdump

Existe uma abordagem melhor? EDIT1: é importante capturar apenas os últimos pacotes, pois não quero que o arquivo fique inflado, pois há tráfego suficiente para preencher o espaço em disco rapidamente.

Responder1

Ok, acho que encontrei umsolução:

sudo tcpdump -XX -i eth0 -w tcpamir-%s.txt -G 10 port 3050

Isso gira seu arquivo de saída a cada 10 segundos para um novo arquivo chamadotcpamir-<unixtimestamp>.txt

Você também pode modificar o arquivo de saída, para que ele se sobrescreva todos os dias, se estiver preocupado com o tamanho do arquivo pendente. Para mais informações leia man 3 strftime.

Eu penso em algo como

sudo tcpdump -XX -i eth0 -w tcpamir-%R.txt -G 86400

Onde %Rindica a hora em notação de 24 horas (12:40, por exemplo).

Leia arquivos de saída relevantes com

sudo tcpdump -r tcpamir-<unixtimestamp>.txt

Segunda solução:

Divida-o em mais comandos e salve-o como um script/função:

sudo tcpdump -XX -i eth0 port 3050 >> tcptmp.txt
sudo tail -n100 tcptmp.txt >> tcpamir.txt
sudo rm tcptmp.txt

Responder2

Se você quiser apenas gravar todo o tráfego capturado, basta adicionar -w à linha removendo'| cauda >> tcpamir.txt'

# tcpdump -XX -i eth0 port 3050 -w tcpamir.cap

Se você for analisar a captura no wireshark, a extensão deve ser .cap. Quando você garantir que a captura foi feita, você poderá eliminá-la comctrl+c

NOTA: -w [filename.cap] para gravar a captura em um arquivo

informação relacionada