wrieshark 本身提供了导出HTTP文件的能力,如下图1:
图1
如果该功能正常,则可以直接使用。如果该功能不正常,例如丢包或者数据不完整导致文件解析出现错误或者异常数据导致文件解析出错,则无法直接导出,这个时候本文所提供的方法就能派上用场。当然不仅如此,后文中所介绍的方法在一些文件显示方面比值wireshark也是存在优势的。
提取图片文件
HTTP传输图片的数据包下载链接见这里,对应第7号流,如下图2:
图2
首先拷贝文件传输的相关数据,由于HTTP协议为文本协议,因此cyberchef是支持对于HTTP协议头部的处理的,因此follow TCP dump,按照原始数据显示后,全选拷贝作为cyeberchef 的输入,关于cyberchef的详细介绍,详见我的专栏《Cyberchef 从入门到精通教程
》,这里,如下图3:
图3
RAW格式的显示内容为16进制的字符串,因此需要先将16进制字符串转换成为对应的16进制数值(即每两个字符构成一个十六进制的数值),同时去除HTTP的头部,则会得到最终的数据内容,如下图4:
图4
相关模块解释如下:
- from hex模块将字符串转换为对应的数值。
- 第一个strip http headers 去除http request的头部,第二个strip http header 去除http response的头部 。
-cyberchef提供的 render image模块可以直接解析并显示JPEG图像数据。
其对应的cyberchef的脚本为:
[
{ "op": "From Hex",
"args": ["Auto"] },
{ "op": "Strip HTTP headers",
"args": [] },
{ "op": "Strip HTTP headers",
"args": [] },
{ "op": "Render Image",
"args": ["Raw"] }
]
可以看到使用cyberchef 能够直接将16进制数据显示图像文件,这个是其优点之一。
gzip压缩
前一个实例中HTTP并没有使用压缩传输,这个例子讲述HTTP压缩传输的场景。关于Gzip的原理,详见我之前的文章《网络传输中的那些编码之-gzip编码》,这里。HTTP传输传使用gzip压缩数据包下载链接见这里。如下图5:
图5
同样的follow tcp dump,以raw格式显示之后全选作为cyberchef的输入,如下图6:
图6
同样的需要先将16进制字符串转换成为对应的16进制数值(即每两个字符构成一个十六进制的数值),去除HTTP的头部,然后解压缩,则会得到最终的数据内容,如下图7:
图7
如果对应的数据中使用了特殊的编码,则可以使用cyberchef中的encoding模块进行相应的编解码。关于cyberchef的更多使用方法介绍,详见我的专栏《Cyberchef 从入门到精通教程》,这里
gzip/chunk
前一个实例中HTTP并没有使用chunk传输,这个例子讲述HTTP chunk传输的场景。关于chunk传输的原理,详见我之前的文章《网络传输中的那些编码之-chunk传输编码》,这里。HTTP传输使用chunk和gzip数据包下载链接见这里。如下图8:
图8
同样的follow tcp dump,以raw格式显示之后全选作为cyberchef的输入,如下图9:
图9
将16进制字符串转换成为对应的16进制数值(即每两个字符构成一个十六进制的数值),去除HTTP的头部,然后chunk重组,解压缩,则会得到最终的数据内容,如下图10:
图10
其对应的cyberchef的脚本为
[
{ "op": "From Hex",
"args": ["Auto"] },
{ "op": "Strip HTTP headers",
"args": [] },
{ "op": "Strip HTTP headers",
"args": [] },
{ "op": "Dechunk HTTP response",
"args": [] },
{ "op": "Gunzip",
"args": [] }
]
可以看到cyberchef对于HTTP协议的支持还是非常全面的,因此在HTTP协议处理方面使用cyberchef非常的便捷。