Como capturar a saída do tcpdump

Como capturar a saída do tcpdump

Gostaria de capturar a saída do tcpdump e usá-la como entrada para um segundo comando. A propósito, não quero usar o formato pcap!

tentei

sudo tcpdump -q ip > ./out.txt

Quando observei o arquivo, vi que todo o STDOUT estava gravado no arquivo o tempo todo, mas esperava que o arquivo fosse substituído apenas pelo novo conteúdo. Todo o STDOUT é armazenado em buffer ou limpo quando gravado no terminal?

  • Existe uma maneira de ler apenas as atualizações parciais do STDOUT?
  • Como posso redirecionar a saída continuamente do tcpdump para outro cmd?

Isto funciona ?

sudo tcpdump -q ip | my_command

Responder1

Para sempre sobrescrever o arquivo a cada nova tcpdumplinha:

sudo tcpdump -l -q ip | awk '{system("echo " $0 " > out")}'

Para usar a saída para outro comando, por exemploawk

  • $3= apenas a 3ª coluna

    sudo tcpdump -l -q ip | awk '{print $3}'
    
  • Filtrar portcp

    sudo tcpdump -l -q ip | awk '/tcp/ {print $0}'
    
  • Ou uma combinação:

    sudo tcpdump -l -q ip | awk '/tcp/ {"echo " $0 " > out"}'
    

deman tcpdump

   -l     Make  stdout  line  buffered.
          Useful if you want to see the data while capturing it.
          E.g.,
                 tcpdump -l | tee dat
          or
                 tcpdump -l > dat & tail -f dat

informação relacionada