这里我需要在许多.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中,他们删除了选项。我仍然需要一个命令行来执行此过滤。
答案 0 :(得分:0)
经过48小时26次观察后,仍然没有回应,只有一次投票
我已经放弃了这种方式,并自己解码框架
我想要的是udp srcport和dstport,以及应用程序数据
实际上,每个网框都有相同的标题长度,因此,很容易通过固定偏移去除标题,并获取特殊数据。
在我的情况下,我只是做一些过滤器并使用 -x 选项输出。,因为:
tshark -r xxx.pcapng -j udp -x
每一行包含三个部分:第一列是偏移引用,接下来的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
希望这可以帮助任何一个也被这样的问题阻止的人