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 %R
indica 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