使用 tshark 递归过滤 .cap/.pcap 文件目录
Recursively Filter directory of .cap/.pcap Files With tshark
我正在尝试将 Wireshark
过滤器应用于 tcpdump
创建的 .cap
个文件的目录。我有大约 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 ...It is possible to use named pipes or stdin (-)
here..."
但我绝不是名为pipes
、stdin
的专家,也不是程序员。
有人能给我指出正确的方向吗?谢谢!
我认为您可以直接使用一些 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
是命令,在本例中是您的 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 警告是因为我使用 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 文件。
我正在尝试将 Wireshark
过滤器应用于 tcpdump
创建的 .cap
个文件的目录。我有大约 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 ...It is possible to use named pipes or stdin (-) here..."
但我绝不是名为pipes
、stdin
的专家,也不是程序员。
有人能给我指出正确的方向吗?谢谢!
我认为您可以直接使用一些 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
是命令,在本例中是您的 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 警告是因为我使用 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 文件。