Como iniciar e matar o tcpdump dentro de um script?

0

Por que não posso interromper (ou seja, kill -2 , não kill -9 ) tcpdump , conforme mostrado neste script? O script é executado, mas tcpdump não termina e continua a ser executado na linha de comando, mesmo depois de imprimir algumas de suas saídas de saída.

(Nota: este script requer sudo devido a tcpdump e kill ).

#!/bin/bash  

#start a process in the background (it happens to be a TCP HTTP sniffer on  the loopback interface, for my apache server):   

tcpdump -i lo -w dump.pcap 'port 80' &  

#.....other commands that send packets to tcpdump.....

#now interrupt the process.  get its PID:  
pid=$(ps -e | pgrep tcpdump)  
echo $pid  

#interrupt it:  
kill -2 $pid
    
por quest 14.03.2016 / 22:18

2 respostas

1

Encontrei parte da resposta nesta postagem sobre estouro de pilha .

Para resumir, tcpdump estava armazenando em buffer sua saída antes de gravar no arquivo de saída, e isso causou problemas quando o script tentou interrompê-lo. Adicionar a opção -U ("flush") a tcpdump corrige isso.

Também foi necessário um comando sleep imediatamente depois de emitir tcpdump para permitir que ele inicializasse, e também antes de eliminá-lo, para permitir que ele gravasse no arquivo:

#!/bin/bash  

#start a process in the background (it happens to be a TCP HTTP sniffer on  the loopback interface, for my apache server):   

tcpdump -U -i lo -w dump.pcap 'port 80' &   
sleep 5

#.....other commands that send packets to tcpdump.....

#now interrupt the process.  get its PID:  
pid=$(ps -e | pgrep tcpdump)  
echo $pid  

#interrupt it:  
sleep 5
kill -2 $pid

Para referência, de man tcpdump , na opção -U :

% bl0ck_qu0te%

Depois disso, o script funcionou bem.

    
por quest 15.03.2016 / 00:09
-2

Você pode digitar o comando abaixo:

killall tcpdump

Isso é relevante se você tiver um tcpdump contínuo em execução e quiser encerrar esse processo. Nada mais é afetado.

    
por Dustin Burke 14.12.2017 / 19:27