wireshark的HTTP协议分析代码大部分在epan/dissectors/packet-http.h(c)文件中,数据组装还原用到了epan/reassemble.h(c)文件中的函数。
当然,连接跟踪是tcp的基础,连接跟踪代码在epan/stream.h(c)文件中。
dissect_http_message基本流程如下:
is_http_request_or_reply()——是否是HTTP request或response头部
req_resp_hdrs_do_reassembly()——如果头部所有数据都在这个报文中,可以开始解析,否则,等待更多数据到来组装;
这里面有对chunked进行分析,只有当所有数据都传输完毕,或者没有更多的chunk时,dissect_http_message才会继续往下走,解剖协议。
下面的事情就是解开http header,
如果传输方式为chunked,把每个chunked块拼装在一起;
如果content-encoding是gzip或deflate,尝试解压缩数据,最后把数据提交给data handle展示在界面上。
转载随意~:陶醉 » wireshark还原http数据