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

如何用Scapy捕获并过滤TLS流量?新手技术求助

Scapy捕获并验证TLS数据包解决方案

一、优化BPF过滤规则

你当前的过滤规则仅限定TCP和端口,会捕获到非TLS的TCP握手包(如SYN/SYN-ACK)。可以通过以下规则精准过滤TLS流量:

  • 针对标准443端口的基础过滤(仅抓带数据的TCP包):
    "tcp port 443 and (tcp[13] & 0x10) != 0"
    
  • 自定义IP+端口的精准过滤(匹配TLS握手/应用数据/警报记录):
    f"tcp and src {source_ip} and dst {destination_ip} and port {port} and tcp[13] & 0x10 != 0 and (tcp[20:1] = 0x16 or tcp[20:1] = 0x17 or tcp[20:1] = 0x15)"
    
    说明:tcp[13] & 0x10 过滤带PSH标志的TCP包(含有效载荷);tcp[20:1] 匹配TLS内容类型(0x16=握手、0x17=应用数据、0x15=警报)。

二、修复TLS数据包验证逻辑

如果你的check_packets_for_tls函数失效,可改用Scapy原生TLS层判断,或者手动校验TLS标识:

def check_packets_for_tls(packets):
    verified = []
    for pkt in packets:
        if not pkt.haslayer(TCP):
            continue
        tcp_payload = pkt[TCP].payload
        # 方式1:用Scapy内置TLS层检测(需安装完整Scapy:pip install scapy[tls])
        if tcp_payload.haslayer(TLS):
            verified.append(pkt)
        # 方式2:手动校验TLS头部(兼容低版本Scapy)
        elif len(tcp_payload) >= 5:
            content_type = ord(tcp_payload[0])
            ver_major = ord(tcp_payload[1])
            # 覆盖TLS 1.0-1.3及SSL 3.0
            if content_type in [0x15, 0x16, 0x17] and ver_major in [0x01, 0x03]:
                verified.append(pkt)
    return verified

三、简化捕获代码(替代sleep方案)

用Scapysniff函数的timeout参数替代time.sleep,逻辑更简洁:

from scapy.all import *
import scapy_utilities as utils

source_ip = "你的源IP"
destination_ip = "你的目标IP"
port = 443  # 或自定义端口

# 应用优化后的过滤规则
scapy_filter = f"tcp and src {source_ip} and dst {destination_ip} and port {port} and tcp[13] & 0x10 != 0"

# 直接捕获30秒内的符合规则的数据包
captured_packets = sniff(filter=scapy_filter, timeout=30)

# 验证并输出结果
verified_packets = utils.check_packets_for_tls(captured_packets)
# 打印可读的数据包摘要,而非原始对象列表
for i, pkt in enumerate(verified_packets):
    print(f"已验证TLS数据包 {i+1}: {pkt.summary()}")

额外注意事项

  • 确保安装了支持TLS的Scapy版本:pip install scapy[tls]
  • 若需兼容TLS 1.3,手动校验时需补充版本判断:ord(tcp_payload[2]) == 0x04(对应版本0x0304)
  • 若TCP头包含选项,tcp[20]的偏移会不准确,此时可使用Scapy的TCP.payload直接获取载荷,避免手动计算偏移

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:35:24