通过tshark命令行获取网络框架中的应用程序数据

时间:2016-10-20 16:13:19

标签: wireshark network-protocols

这里我需要在许多.pcapng文件中解析自定义协议,我想直接过滤并通过tshark命令输出应用程序原始数据。

首先,我使用" -e data.data" 选项,但是,某些应用程序数据可能会被解码为其他协议,并且不会由-e data.data输出。
然后,我找到了一种方法,特别是wireshark配置文件夹下的" disable-protocol" 文件,但是,我必须先获取配置文件并在其他人运行解析程序之前部署它PC。
并且,我尝试禁用除udp和tcp之外的所有协议,但它无法正常工作 我也禁用已知的冲突协议,它可以工作,但其他未知协议可能存在相同的错误,而且tshark的输出仍然不能完全信任。

我在Windows7和wireshark 2.2上工作。使用python 2.7进行解析工作 总结一下,我想要的是一个可移植的命令行,它可以灵活地直接输出网络中UDP信息后的所有数据 我可以通过在命令行中添加选项来禁用某些端口上的解码吗?

EDIT1:
我在wireshark 1.12中发现,"解码为" 对话框中有一个"不解码" 选项,如果启用它,显示就是我想要的。但在wireshark 2.2中,他们删除了选项。我仍然需要一个命令行来执行此过滤。

1 个答案:

答案 0 :(得分:0)

经过48小时26次观察后,仍然没有回应,只有一次投票 我已经放弃了这种方式,并自己解码框架 我想要的是udp srcport和dstport,以及应用程序数据 实际上,每个网框都有相同的标题长度,因此,很容易通过固定偏移去除标题,并获取特殊数据。
在我的情况下,我只是做一些过滤器并使用 -x 选项输出。,因为:

  

tshark -r xxx.pcapng -j udp -x

输出可能如下所示:
enter image description here
(例如,不是真实的情况)

每一行包含三个部分:第一列是偏移引用,接下来的16列是十六进制的字节,剩余部分是映射到数据的字符。
我的代码:


def load_tshark_data(tshark_file_path):
    tshark_exe = "c:/Program Files/Wireshark/tshark.exe"
    output = subprocess.check_output([
        tshark_exe,
        "-r",tshark_file_path,
        "-j","udp",
        "-x"
    ])
    hex_buff = ""
    line_buff = ""
    for c in output:
        if c == "\n":
            if len(line_buff) > 54:
                hex_buff += line_buff[5:53]
                line_buff = ''
            else:
                src_port = int(hex_buff[0x22*3 : 0x24*3].replace(" ",""),16)
                dst_port = int(hex_buff[0x24*3 : 0x26*3].replace(" ",""),16)
                app_data = hex_buff[0x2a*3 : ].strip(" ")
                hex_buff = ""
                yield [src_port, dst_port, app_data]
        else:
            line_buff += c

希望这可以帮助任何一个也被这样的问题阻止的人