scapy 有一个名为 http2 的模块,在其信息中:“编码/解码 HTTP/2 帧”
import scapy.contrib.http2 as http2
packets = rdpcap("in.pcapng")
for p in packets:
if p.haslayer(TCP):
p[TCP].payload # how to turn this into a http2.H2Seq or http2.H2Frame??
p[TCP].payload.name
给出“原始”,p.haslayer(http2.H2Seq)
或http2.H2Frame
给出假。
我想将这个数据包转换为http2数据包,然后解析标头或数据(如果有)。
默认情况下,scapy 甚至不解析 HTTP 负载,直到您导入
scapy.layers.http
。 这段代码使它起作用。因此,为了解析 HTTP/2,您需要添加:
from scapy.packet import bind_layers
from scapy.contrib.http2 import *
bind_layers(TCP, H2Seq)
你也可以用
H2Seq(bytes(p[TCP].payload))
自己解析。
就我而言,我在一个使用非 80 端口的 pcap 文件中同时拥有 HTTP 1 和 2 流量,并且无法让 scapy 同时正确解析这两个流量,因此我自己解析它。