使用tshark递归过滤.cap / .pcap文件的目录

时间:2016-04-13 20:17:28

标签: wireshark tcpdump tshark

我正在尝试将Wireshark过滤器应用于由.cap创建的tcpdump个文件的目录。我有大约1000个.cap文件等待过滤(我们有意捕获没有过滤器,以确保我们拥有我们需要的所有数据,以防我们的假设没有成功)。我找不到任何人使用tshark递归读取文件,应用过滤器,写出新的.cap文件,然后继续下一步,冲洗,重复。

我的设置:

文件到达Tcpdump后,

1GB正在转储流量并滚动到新文件(是的,对于pcaps来说很大)。仅供参考,这是我正在使用的tcpdump命令:

sudo tcpdump -q -i <INTERFACE> -w path/to/capfile.cap -C 1000 -Z root

我可以使用tshark将过滤器应用于给定的.cap文件,并使用以下命令将其输出到新的.cap文件:

tshark -R <FILTER> -r in.cap0001 -w out.cap0001

Tshark主页说明,

  

“ - r ...可以使用命名管道或标准输入( - )   在这里......“

但我绝不是名为pipesstdin的专家,也不是程序员。

有人能指出我正确的方向吗?谢谢!

1 个答案:

答案 0 :(得分:0)

我认为您可以使用一些shell命令直接实现此目的。

尝试以下操作,转到捕获目录并执行以下命令:

ls | grep '\.cap$' | while read f; do (tshark -R <FILTER> -r $f -w mod_$f); done

这将生成新的 .cap 文件,并应用了所需的过滤器。毋庸置疑,这个命令可以适当调整以满足您的个人需求,但这是一个很好的起点。

命令说明:

ls:列出当前目录中包含的所有文件。

|:管道,左侧命令的标准输出用作右侧命令的标准输入。

grep '\.cap$':确保您只使用以 .cap 结尾的文件进行匹配。根据您的评论,请注意,如果文件未完全以 .cap 结尾,则此过滤器应更改为grep '\.cap',因为$告诉grep该行以它前面的任何结尾(在本例中为“。cap”字符串)。

while read f:读取前面命令返回的每一行。

do (<COMMAND>):对于读取的每一行,do为COMMAND,在本例中为tshark命令。

donewhile命令语法的一部分。

执行命令的示例:

# ls
fake.cap2  non_cap_file.txt  out2.cap  out.cap

# ls | grep '\.cap$'
out2.cap
out.cap

以下是您实际需要执行的唯一行,其他行仅用于说明命令执行前后的文件夹内容。

# ls | grep '\.cap$' | while read f; do (tshark -R <FILTER> -r $f -w mod_$f); done
Running as user "root" and group "root". This could be dangerous.
Running as user "root" and group "root". This could be dangerous.

另外,我收到了这个根警告,因为我使用root用户进行了这个快速测试......

# ls
fake.cap2  mod_out2.cap  mod_out.cap  non_cap_file.txt  out2.cap  out.cap

# ls | grep '\.cap$'
mod_out2.cap
mod_out.cap
out2.cap
out.cap

正如您所看到它抓取每个 .cap 文件,应用指定的过滤器并写入新的 mod _ * .cap 文件。