You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Scapy过滤HTTP Get请求包遇阻:Raw段解码及过滤函数报错求助

解决Scapy过滤HTTP GET请求的问题

Hey there! Let's break down what's going wrong here and get it fixed:

1. 你的数据包是加密的HTTPS,不是明文HTTP

先看你提供的Raw段内容:load="\x17\x03\x03\x00m...",其中\x17是TLS记录层的应用数据类型标识,\x03\x03代表TLS 1.2版本。这说明这是一个加密的HTTPS数据包——所有HTTP内容(包括GET请求)都被加密了,所以你根本不可能在Raw段里找到明文的GET字符串,这才是过滤失败的核心原因。

如果要分析HTTPS里的HTTP请求,你需要先解密TLS流量,比如:

  • 使用Wireshark并提供服务器私钥来解密
  • 或者配置代理(如mitmproxy)拦截解密流量后,再用Scapy分析

2. 修复Python3中Scapy Raw段的处理错误

你遇到的WARNING: Calling str(pkt) on Python 3 makes no sense!是因为Python3严格区分字符串(str)和字节串(bytes),而Scapy的Raw对象的load属性存储的是字节串。直接调用str(packet[Raw])既不符合Python3的类型逻辑,也会触发Scapy的警告,自然无法正确匹配内容。

正确的明文HTTP GET过滤函数

如果是处理**明文HTTP(默认80端口)**的数据包,应该直接访问Raw.load并和字节串b'GET'比较,而不是字符串:

def http_get_filter(packet):
    # 检查TCP和Raw层存在,同时判断负载以b'GET'开头
    return (TCP in packet 
            and Raw in packet 
            and packet[Raw].load.startswith(b'GET'))

进阶:加上端口过滤(更精准)

为了避免误匹配其他TCP端口的数据包,可以加上HTTP默认端口的过滤:

def http_get_filter(packet):
    return (TCP in packet 
            and Raw in packet 
            and (packet[TCP].dport == 80 or packet[TCP].sport == 80)
            and packet[Raw].load.startswith(b'GET'))

总结

  • 你当前捕获的是HTTPS加密数据包,无法直接从Raw段看到明文GET请求,需要先解密
  • 在Python3中处理Scapy的Raw段,必须使用packet[Raw].load(字节串)来操作,不能直接转成str

内容的提问来源于stack exchange,提问作者Doron Shevach

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 19:57:52