2013-03-06 64 views
3

是否可以使用-T fields選項或類似的方法獲得tshark每個字段(包內)的輸出?tshark輸出所有字段?

例如對於分組/重建每一個領域,我想是這樣的:

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 

回答

5

只是偶然發現:

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,而不是在header_field_info *hfinfo;name開了竅。當我有機會時,我應該爲此提供一個選項。

相關問題