pyshark解析HTTP报文不显示\r\n\r\n且头部顺序与Wireshark不一致问询
问题1:获取HTTP头部末尾完整\r\n\r\n的实现方法
pyshark底层调用tshark完成报文解析,默认打印的是结构化拆解后的字段,展示时会给每个拆分出的头部行末尾添加\r\n,而HTTP头部与请求体之间的原生分隔符\r\n\r\n会被截断为单个\r\n展示。
要获取完整的原始分隔符,可通过开启原始数据捕获能力实现:
修改FileCapture初始化参数,添加include_raw=True即可读取HTTP层的完整原始字节,解码后就能看到完整的\r\n\r\n:
import pyshark with pyshark.FileCapture('testing-mutillidae1.pcap', include_raw=True) as capture: for pkt in capture: if hasattr(pkt, 'http'): # 读取HTTP层原始字节并解码 http_raw_content = pkt.http.raw_value.decode('utf-8', errors='replace') print(http_raw_content) break
如果当前HTTP报文未跨TCP分段,也可以直接读取TCP层的payload字段解析,效果一致。
问题2:HTTP头部顺序与Wireshark不一致的原因
顺序差异由两点导致:
- Wireshark的头部列表严格按照报文实际传输的字节顺序展示,而pyshark会将tshark解析出的HTTP字段存储为无序类字典结构,遍历输出时不会保留原始传输顺序。
- pyshark输出内容额外插入了大量tshark生成的衍生字段,比如你输出中的
Cookie pair、Request URI Path、Expert Info等,这类字段本身不属于原始HTTP头部,插入后也会打乱原有头部顺序。
如果需要保留原始头部顺序,直接解析上述原始HTTP字节,自行分割头部行即可。
内容的提问来源于stack exchange,提问作者xplo1t
相关产品推荐
相关产品推荐

