soma de todos os pacotes em arquivos pcap

0

Estou tentando fazer um script bash simples para calcular pacotes capturados em arquivos pcap, usei o tcpdump para obter pacotes em cada arquivo pcap e incluí-los usando um script bash, mas parece que não funciona.

#!/bin/bash
FILES=/share/capture/*.pcap
sum =0
for f in $FILES
 do
  output=$(sudo tcpdump -r $f 2> /dev/null |wc -l)
  sum = $((output+ sum))
done
echo $sum

Poderia, por favor, me dizer o que estou fazendo de errado?

    
por Jishnu U Nair 23.07.2015 / 10:04

2 respostas

1
#!/bin/bash                                                                                                                                                                                                                                  
files=(/share/capture/*.pcap)
#echo $files
sum=0
for f in "${files[@]}"
do
  output='sudo tcpdump -r $f 2> /dev/null | wc -l'
  sum=$((output + sum))
done
echo $sum
    
por 23.07.2015 / 10:43
2

Basta executar wc -l na saída para todos os arquivos:

#!/bin/bash -
files=(/share/capture/*.pcap)

for f in "${files[@]}"; do
  tcpdump -qr "$f" 2> /dev/null
done | wc -l

Veja também:

capinfos -rTc "${files[@]}"

capinfos -rTc "${files[@]}" | cut -f2 | paste -sd + | bc

(assumindo que os nomes dos arquivos não contenham caracteres TAB ou NL).

Observe que o que você faz:

FILES=/share/capture/*.pcap

Você está atribuindo a string /share/capture/*.pcap , não a lista de arquivos para $FILES . Esse padrão glob é expandido quando $FILES é referenciado sem aspas (o operador split + glob ). Posteriormente, você também deixa $f sem aspas, então invoque novamente o operador split + glob. Portanto, se $f continha caracteres em branco ou outros curingas, ele seria expandido para outros arquivos novamente. O melhor é usar uma matriz aqui e certifique-se de citar todas as suas variáveis.

    
por 23.07.2015 / 11:05