我有一堆 PCAP 文件,我正在尝试将它们转换为表格元数据。我的直觉是使用 tshark 剖析每个 PCAP 文件,使用
-T fields
选项生成元数据。然而,我注意到 tshark 在解析相对较大的 PCAP 文件(数十到数百 MB)时可能非常慢,而在 Wireshark 中显示相同的文件则要快得多。我进行了一些实验,在 Wireshark 和 tshark 中打开相同的文件,从两者输出相同的字段,并且 tshark 需要几分钟(有时长达一个小时)才能将输出完全写入文件,而我可以打开该文件在 Wireshark 中,然后选择在不到一分钟的时间内将数据输出到文件中(全部使用 GUI)(其中大部分只是我点击和打字)。为什么是这样?这是我在 tshark 中使用的命令:
tshark -r my_pcap.pcap \
-2 \
-N dmnN \
-E separator=/t \
-E header=y \
-E quote=d \
-T fields \
-e frame.time_epoch \
-e frame.len \
-e frame.protocols \
-e _ws.malformed \
-e _ws.col.Protocol \
-e ip.src \
-e ip.dst \
-e ip.src_host \
-e ip.dst_host \
> my_pcap.tsv
我非常确定花费这么长时间的原因是 DNS 查找(
-N dmnN
和 ip.src_host
、ip.dst_host
)。然而,Wireshark 也进行 DNS 查找;在 Wireshark 首选项中,我选择了 Resolve network (IP) addresses
、Use captured DNS packet data for name resolution
和 Use your system's DNS settings for name resolution
。在 Wireshark 中,我输出以下字段:数字、时间(指定格式)、协议、长度、信息、源端口、目标端口、UTC 日期(YYYY-MM-DD 和时间)、源地址(未解析)、目标地址(未解析),源地址(已解析),目标地址(已解析)。
我记录了一些使用 tshark 读取 PCAP 文件并输出到
/dev/null
的时间。这里文件大小是第一个条目,第二个条目是 /usr/bin/time 的输出:
20.7 MB, 6.16user 3.51system 11:36.95elapsed 1%CPU
10.2 MB, 2.18user 3.28system 10:45.22elapsed 0%CPU
42.1 MB, 6.70user 5.13system 44:07.60elapsed 0%CPU
这是一个已知问题吗?有简单的解决办法吗?
这个问题已经在 Wireshark 问答网站上被问到时得到了解答。