从 Scapy 数据包中提取 GET 请求内容

Extract GET request contents from Scapy packet

我们正在解析通过 tcpdump 命令创建的 pcap 文件。在这些 pcap 文件中,我们试图提取 Raw 字段中的 GET 请求信息并以可读格式打印它。

pkts = rdpcap(filename)
for pkt in pkts:
    if Raw in pkt:
        raw_test = pkt[Raw].load
        if "GET" in raw_test:
             #do stuff

raw_test 的结果文本如下所示: ▒פ▒▒▒▒▒▒2▒nk▒N▒▒bEr▒▒(|▒▒▒▒Ǫ=▒▒Ih▒H+%▒2.▒L[▒▒▒sl▒E▒▒▒k6▒]=މf▒d▒O▒hB{6s▒▒▒7O2!PCG&▒A.4I▒耓▒X▒▒▒W]▒▒M5@▒▒▒vK▒#Ċ▒ ▒▒▒m]Zb_▒8▒▒▒nb~ ]▒h▒6▒.̠▒49ؾG?▒▒▒4▒Ӹ▒▒G▒▒́G▒:Y▒▒▒▒.▒8▒▒d▒i4▒JAC)▒▒AO▒k▒z-▒▒S30▒X?▒▒W5B▒yW▒m▒▒▒/ƈ:G▒▒▒E▒▒<▒▒▒m▒]▒▒▒▒t▒:▒▒▒Ŕ▒W▒▒D▒E▒▒▒▒▒࿄▒▒zZ▒▒x▒]▒▒{{▒▒u▒){▒▒o▒▒G▒F▒▒▒▒▒v ▒▒▒b.

我们也尝试通过 pkt.sprintf(“{Raw:%Raw.load%}\n”) 对其进行格式化,但产生了相同的输出

P.S。请不要 link 我们到其他相关堆栈 posts/questions 因为我们已经遇到过很多,并且 none 似乎解决了我们的问题。

提前致谢,非常感谢您的帮助!

请试试这个,我假设 http 是针对端口 80

if TCP in pkt and pkt[TCP].dport == 80 \
            and pkt[TCP].load.startswith("GET") :
        print pkt[TCP].load