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

Python3.9(Win10)下无需scapy-ssl_tls,用Scapy嗅探HTTPS数据包

无需scapy-ssl_tls捕获HTTPS相关信息的方案

首先明确:HTTPS的HTTP请求内容是加密的,不可能像明文HTTP那样直接抓取到完整URL(域名+路径),因为加密层会把HTTP内容完全包裹。但TLS握手阶段的Server Name Indication(SNI)字段是明文传输的,我们可以通过提取SNI来获取访问的HTTPS域名,这部分不需要依赖scapy-ssl_tls模块,原生Scapy就能实现。

以下是修改后的代码:

import scapy.all as scapy
from scapy.layers.tls.record import TLSRecord
from scapy.layers.tls.handshake import TLSClientHello

def sniff(interface):
    # 过滤443端口的TCP流量
    scapy.sniff(iface=interface, store=False, prn=process_sniffed_packet, filter="tcp port 443")

def process_sniffed_packet(packet):
    # 尝试解析TLS记录和Client Hello
    if packet.haslayer(TLSRecord):
        tls_layer = packet[TLSRecord]
        if tls_layer.type == 22:  # 22代表握手消息类型
            handshake = tls_layer.payload
            if isinstance(handshake, TLSClientHello):
                # 提取SNI字段
                for ext in handshake.extensions:
                    if ext.type == 0:  # 0代表SNI扩展
                        sni = ext.servernames[0].servername.decode()
                        print(f"=> HTTPS Domain: {sni}")

sniff("Wi-Fi")

代码说明:

  • 原生Scapy已经内置了TLSRecord和TLSClientHello的解析支持,不需要额外安装模块
  • 过滤tcp port 443的流量,只处理HTTPS端口的数据包
  • 解析TLS握手的Client Hello消息,提取其中的SNI扩展字段,这是HTTPS请求中唯一明文传输的目标域名信息

局限性:

  • 只能获取HTTPS域名,无法获取具体的请求路径(比如/login这类),因为这部分内容在加密的HTTP报文中
  • 需要确保你的网卡处于混杂模式(Windows下可能需要以管理员身份运行Python脚本)

内容的提问来源于stack exchange,提问作者Mohammad Dehghani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 04:07:10