pcap 文件中所有数据包的总和

pcap 文件中所有数据包的总和

我正在尝试制作一个简单的 bash 脚本来计算 pcap 文件中捕获的数据包,我使用 tcpdump 获取每个 pcap 文件中的数据包并使用 bash 脚本添加它们,但它似乎不起作用。

#!/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

你能告诉我我做错了什么吗?

答案1

只需运行wc -l所有文件的输出即可:

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

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

也可以看看:

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

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

(假设文件名不包含 TAB 或 NL 字符)。

请注意您所做的:

FILES=/share/capture/*.pcap

您正在将字符串/share/capture/*.pcap而不是文件列表分配给$FILES。当$FILES不加引号引用时,该全局模式会扩展(分割+全局操作员)。稍后,您也可以$f不加引号,因此再次调用 split+glob 运算符。因此,如果$f包含空白字符或其他通配符,它​​将再次扩展到其他文件。最好是在此处使用数组并确保引用所有变量。

答案2

#!/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

相关内容