我正在尝试将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 ...可以使用命名管道或标准输入( - ) 在这里......“
但我绝不是名为pipes
,stdin
的专家,也不是程序员。
有人能指出我正确的方向吗?谢谢!
答案 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
命令。
done
:while
命令语法的一部分。
执行命令的示例:
# 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 文件。