gak*_*gak 5 pcap wireshark tshark
是否可以tshark使用-T fields选项或类似方法获得每个字段(在数据包内)的输出?
例如,对于数据包/重建中的每个字段,我想要这样的事情:
eth.src:f2:3c:91:96:fd:09,ip.src:1.2.3.4,tcp.dst_port:80,http.request.uri:/index.html
Run Code Online (Sandbox Code Playgroud)
(\xff当值包含逗号时,可以用逗号替换逗号以使解析更好.)
我意识到有-e选项,但似乎我必须在命令行中放入每个可能的字段.最重要的是,每个数据包中只使用一小部分字段,这使得需要解析大量数据.
我目前打算使用该tshark -V选项并解析它,但理想情况下我想要更多的机器风格术语,http.request.uri而不是"人类可读",例如:
Hypertext Transfer Protocol
GET /main.php HTTP/1.1\r\n
[Expert Info (Chat/Sequence): GET /main.php HTTP/1.1\r\n]
[Message: GET /main.php HTTP/1.1\r\n]
[Severity level: Chat]
[Group: Sequence]
Request Method: GET
Request URI: /main.php
Run Code Online (Sandbox Code Playgroud)
gak*_*gak 10
偶然发现:
tshark -T pdml
Run Code Online (Sandbox Code Playgroud)
这正是我需要的:
<packet>
<proto name="geninfo" pos="0" showname="General information" size="173">
<field name="num" pos="0" show="323" showname="Number" value="143" size="173"/>
<field name="len" pos="0" show="173" showname="Frame Length" value="ad" size="173"/>
<field name="caplen" pos="0" show="173" showname="Captured Length" value="ad" size="173"/>
<field name="timestamp" pos="0" show="Aug 7, 2011 16:16:13.579504000 EST" showname="Captured Time" value="1312697773.579504000" size="173"/>
</proto>
<proto name="frame" showname="Frame 323: 173 bytes on wire (1384 bits), 173 bytes captured (1384 bits)" size="173" pos="0">
<field name="frame.time" showname="Arrival Time: Aug 7, 2011 16:16:13.579504000 EST" size="0" pos="0" show="Aug 7, 2011 16:16:13.579504000"/>
... etc.
Run Code Online (Sandbox Code Playgroud)
它包括Wireshark过滤器名称,以及数据包中包含的所有字段.
更新:这是相当缓慢的,和黑客攻击了tshark.c这样-V打印出来的abbrev,而不是name在header_field_info *hfinfo;做的伎俩了.当我有机会的时候,我应该把它作为一个选择.