使用Tshark查看json数据

时间:2014-03-10 08:29:51

标签: json wireshark tcpdump tshark

当我使用tshark解码像这样的capfile

 tshark -V -r test.cap  -Y 'http>0'

我得到了

...
JavaScript Object Notation: application/json
    Object
        Member Key: "ret"
            Number value: 99
        Member Key: "message"
            String value:test

问题是如何使用tshark

获取类似的json数据
...
{"ret":99,"message":"test"}

3 个答案:

答案 0 :(得分:1)

有类似的问题。 仅使用wireshark / tshark选项无法解决问题。 以下是我从cap文件中提取原始json和xml 的解决方法。

# 1. convert to pdml with DISABLED json and xml dissectors
tshark -r "wireshark.cap" -2 -R "http" --disable-protocol json --disable-protocol xml -V -T pdml > "wireshark.cap.pdml.xml" 

# 2. get hex encoded raw data from media.type pdml element
# 3. perform hex decode

我使用 groovy 脚本执行第2步和第3步

import groovy.xml.*

...

def String hexDecode(String s) {
    if ( null == s || 0 == s.length() ) { 
            return null
    }   
    def res = ""
    for (int i = 0; i < s?.length(); i += 2) {
            res += (Character)((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i+1), 16))
    }   
    return res 
}

...

def xmlFile = new File("wireshark.cap.pdml.xml")
def pdml  = new XmlParser().parseText( xmlFile.text )
pdml.packet.each{ packet->
    def media = packet.proto.find{ "media"==it.@name }
    def hex  = media?.field.find{"media.type"==it.@name }?.@value
    def raw = hexDecode(hex)
}

答案 1 :(得分:1)

tshark -r test.cap -Y'http&gt; 0'-T json

tshark -r test.cap -Y'http&gt; 0'-T json -x#还包括原始数据包数据

答案 2 :(得分:-1)

我不太确定“我怎样才能获得使用tshark的json数据”的意思。您在运行tshark时看到的JavaScript信息看起来像是因为tshark将应用程序/ json主体解析为JSON,并在您看到的漂亮输出中显示JSON信息。如果您不希望它这样做,您需要禁用JSON协议/解析器;不幸的是,我不相信有一种方法可以在tshark中禁用协议,但是还有wireshark(转到菜单Analyze-&gt; Enabled Protocols并取消选中JSON)。