Como capturar os últimos N segundos de pacotes usando tcpdump


14

Como capturar os últimos N segundos de pacotes usando o tcpdump?


1
"Dê-me" não o levará muito longe aqui. Talvez você deva nos mostrar o que você tentou até agora e onde exatamente você tem problemas que não consegue resolver sozinho.
Matthias Krull

O comando bash que você deseja é: "man tcpdump"
William Pursell

Respostas:


15

Se você quiser que o tcpdump seja executado por n segundos e depois saia, use o tempo limite.

Por exemplo:

timeout 2 tcpdump -eni mon0

Caso contrário, não acredito que o tcpdump tenha uma opção para fazer isso.


Infelizmente, o comando timeout não está presente no CentOS 5.x. Foi adicionado em uma versão mais recente do coreutils. Outra motivação para eu atualizar o sistema operacional.
Mister_Tom

Suponho que se você não tem tempo limite, você poderia, em vez criar algo como tempo limite com um script:
siesta

Funciona muito bem para mim. Usei isso para monitorar todo o tráfego de um programa que não estava funcionando. Comecei o tcpdump com um tempo limite de N segundos. Então iniciei o programa (que leva até N segundos).
Trevor Boyd Smith

A pergunta pede para capturar os últimos N segundos. Sua resposta diz como capturar os primeiros N segundos.
Flimzy 07/10

3

Eu acho que a melhor maneira de conseguir isso é com o sinalizador -G do tcpdump, que, quando usado com -w, salva seu dump em um novo arquivo a cada N segundos. Por exemplo:

tcpdump -w outfile-% s -G 10

Isso criará um novo arquivo com o nome 'outfile-XXXX' (onde XXXX representa o número de segundos desde a época) a cada 10 segundos.

Consulte as páginas de manual para tcpdump (8) e strftime (3) para obter detalhes adicionais.


O tcpdump 3.9.4 fornecido com o CentOS 5.10 não possui a opção -G. Eu realmente preciso atualizar meu sistema operacional.
MJ_Jul 17

-G não para o comando tcpdump. Ainda funciona para sempre. O tempo limite 2 tcpdump interromperá o comando após 2 segundos.
Ciceron

@ ciceron: A questão não era sobre parar o tcpdump. Tratava-se de capturar os últimos N segundos . Sua sugestão capturará os primeiros N segundos. Decididamente, não o que o OP pediu.
Flimzy

1

Você pode usar tethereal em vez de tcpdump. Você pode usar esta opção de linha de comando:

-a duration:X

Embora isso possa responder à pergunta, seria uma resposta melhor se você pudesse fornecer alguma explicação para isso.
DavidPostill

O próprio tcpdump não permite um rastreamento de pacotes com tempo limitado, mas o tshark permite. (nb desde que esta pergunta foi feita e respondida, Etéreo tornou Wireshark) tshark -a duration:600 -i eth0 -w $(hostname).10mins.pcapirá capturar dez minutos a pena de tráfego de interface eth0 no arquivo $ (hostname) .10mins.pcap
Andrew Beals

0

tcpdump options -w new.tcpdump

ps -ef |grep tcpdump

tome nota do PID, diga que é 11193

at 11:00 kill 11193

Agora é só esperar até 11:00 chegar e sua captura será morta, mas salva


O fwiw pgrep é uma alternativa muito melhor ao ps | grep; especialmente aqui.
Boa Pessoa

0

Como estava tentando resolver o mesmo problema, escrevi um script portátil para executar o tcpdump por n segundo.

#tcpdump_for_n_sec.sh
n=$1
shift #remove first arg from $@ 
tcpdump $@ & x=$!
sleep $n
kill $x

Uso ./tcpdump_for_n_sec.sh sec args para tcpdump

./tcpdump_for_n_sec.sh 5 i- any not port 22 -s0 -wfile.pcap

0

sudo tcpdump -i -w e isso executará o tcpdump no modo de suspensão

  • w: salve a saída no arquivo .pcap &: o processo tcpdump será executado no modo de suspensão nota: verifique se há espaço suficiente disponível, se desejar. para executá-lo por um tempo. Ele não interromperá o logoff até que você finalize o processo.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.