前面一章讲了常规的数据包过滤方法,本篇介绍下未解码字段过滤方法。
我们知道tcpdump或者别的抓包手段抓到的数据包的原始数据都是16进制的原始码流,wireshark会根据码流里的每一层的协议标识先识别出协议,再根据协议标准去将16进制原始码流解码成我们可以看懂的ASCII码。
但是由于一些原因,例如原始包的协议内容被抓断了,以及网络设备之间约定的东西,wireshark没有从头抓起,没有获取到,所以无法识别一些提前约定的东西,尤其对于使用头压缩技术的协议,例如http2协议,这些原因造成wireshark不是总能将原始的码流解码成明文。还有些私有协议,wireshark当然没有标准字段解码依据,也是无法解码的。
上面讲的种种情况下,我们欲过滤自己想要的字段怎么办呢?
一,有参考包内容的
1、tcp传输层过滤原始码流
我们可以不必关注上层应用协议是什么,上层的协议的header和data都属于tcp的data部分,所以我们可以通过tcp的data进行过滤我们想要的内容。 例如这个标记的200ok的数据包里的内容,wireshark就没能具体解码出来,我们将红框的16机制数copy出来: 0000 7b == 22 76 61 6c 69 64 69 74 79 50 65 72 69 6f 64 0010 22 == 3a 38 36 34 30 30 2c 22 6e 66 49 6e 73 74 61 0020 6e 63 65 73 22 3a 5b 5d 7d
过滤规则:tcp.payload contains 22:76:61:6c:69:64:69:74:79:50:65:72:69:6f:64:22
就能得到刚刚mark的包,注意这里的contains是包含匹配,tcp.payload过滤方法不需要加“”
2,应用层过滤原始码流
例如应用层是http2协议,由于头压缩技术,抓包没有抓到约定协商的压缩规则,导致无法解码的情况下,可以使用这种过滤方法,找寻自己想要过滤字段的方法类似上面。
过滤HTTP2的data部分 http2.data.data contains XX:XX:XX:XX:XX:XX or http2 contains XX:XX:XX:XX:XX:XX
举例: http2 contains 22:53:4d:46:22
二,根据协议规范
根据协议规范字段将需要过滤的字段自行翻译为16进制码流,然后应用于过滤规则中,这个可自行研究。
这种方式其实常用于tcp,http,json等编码格式。当然如果有对比包,过滤其他编码格式的数据包也是没有问题的。
|