9

当我使用 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"}
4

3 回答 3

3
tshark -r test.cap  -Y 'http>0' -T json

tshark -r test.cap  -Y 'http>0' -T json -x # to also include the raw packet data
于 2016-11-23T19:50:59.840 回答
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

我在步骤 2 和 3 中使用了groovy脚本

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)
}
于 2015-09-17T07:16:57.087 回答
-1

我不太确定“如何使用 tshark 获取 json 数据”是什么意思。您在运行 tshark 时看到的 JavaScript 信息看起来像这样,因为 tshark 将 application/json 主体解析为 JSON 并在漂亮的输出中显示 JSON 信息,就像您看到的那样。如果您不希望它这样做,则需要禁用 JSON 协议/解析器;不幸的是,我不相信有办法在 tshark 中禁用协议,但在 Wireshark 中有(转到菜单分析->启用协议并取消选中 JSON 协议)。

于 2014-03-10T15:50:48.760 回答