我想解析 tshark 的标准头输出。由于默认值不起作用,我正在使用一个自定义字段解析器,它几乎可以做同样的事情。我缺少的是协议名称的解析。我的命令是:
sudo tshark -b 256 -P -T fields -e frame.time_epoch -e ip.src -e ip.dst -e ip.proto -e ip.len -e col.Info -E separator=';' -b filesize:65535 -b files:10 -w tshark_tmp
这几乎可行,我得到的是(这个例子是捕获两个 ping):
1378869929.862628000;192.168.78.252;192.168.78.53;1;84;Echo (ping) request id=0x0abe, seq=65/16640, ttl=64
1378869929.863188000;192.168.78.53;192.168.78.252;1;84;Echo (ping) reply id=0x0abe, seq=65/16640, ttl=64 (request in 1)
在正常的、没有自定义字段的 tshark 中,相同的两个 ping 看起来像这样:
0.000000 192.168.78.252 -> 192.168.78.53 ICMP 98 Echo (ping) request id=0x0abe, seq=13/3328, ttl=64
0.000707 192.168.78.53 -> 192.168.78.252 ICMP 98 Echo (ping) reply id=0x0abe, seq=13/3328, ttl=64 (request in 1)
我需要解决的主要区别在于我84
的协议,而 tshark 打印ICMP 98
. 我可以实现自己的查找表,但是有大量的协议,tshark 已经知道如何解码它们,我只需要弄清楚如何在我的解析中得到它。