目前我这样做是为了读取网络捕获文件:
tshark -r myfile icmp
它仅打印 ICMP 数据包,它是 IP 之上的协议(不是 UDP 或 TCP)。
但这myfile
是一个包含大量 HTTP 流量的大文件。我发现tshark
处理这个文件需要很长时间,部分原因是它完全处理了所有 TCP 数据包,甚至剖析了 HTTP 数据。我意识到这一点是因为它打印了与 HTTP 剖析相关的错误消息。
因为我知道我想要的 ICMP 数据包永远不会在 TCP 内部,所以我尝试了这些:
tshark -r myfile 'not tcp and icmp'
tshark -r myfile -2 -R 'not tcp' icmp
但是 tshark 仍然会解析 HTTP 数据包(我再次知道这一点,因为我看到了 HTTP 解析器错误消息)。
当低级协议不匹配时,我想通过不解析高级协议来节省时间(并避免由于解析器错误而导致崩溃)。
我知道我可以按照协议拆分我的捕获文件,但这并不实用,因为我想要查看的确切内容是无法提前知道的。
我也尝试了-O
启用特定解剖器的选项,但是这会tshark
打印每个数据包的完整多行详细信息,这不是我想要的。
我怎样才能tshark
跳过解析特定低级协议的数据包?
我正在使用 tshark 1.10.6,但如果需要,我可以使用更新的版本。
答案1
你的语法不正确。你似乎混淆了Wireshark 显示过滤器语法和pcap 过滤器捕获过滤器语法。
使用最新稳定版本的沙克(目前为 2.4.0),您可以指定与选项一起使用的显示过滤器-Y
。例如:
tshark -r myfile -Y "icmp"
该-Y
选项在 1.10.6 版本中也可用。
或者,您可以使用读取过滤器如下所示,但我一般坚持上面的显示过滤方法:
tshark -r myfile -2R "icmp"