tshark输出所有字段?

时间:2013-03-06 06:12:24

标签: wireshark pcap tshark

是否可以使用tshark选项或类似方法在每个字段(包内)中输出-T fields

e.g。对于数据包/重建中的每个字段,我想要这样的事情:

eth.src:f2:3c:91:96:fd:09,ip.src:1.2.3.4,tcp.dst_port:80,http.request.uri:/index.html

(逗号可以替换为\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

1 个答案:

答案 0 :(得分:9)

偶然发现:

tshark -T pdml

这正是我所需要的:

<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.

它包括Wireshark过滤器名称,以及数据包中包含的所有字段。

更新:这非常慢,并且正在哄骗tshark.c,因此-V打印出abbrev而不是name { {1}}也可以做到这一点。当我有机会的时候,我应该把它作为一个选择。