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

配置IPSec SP/SA后,Scapy生成的IP流量无法触发加密的解决请求

解决Scapy流量触发IPSec加密的问题

核心原因

Scapy默认用**原始套接字(raw socket)**发送完整IP包,直接绕过了Linux内核的TCP/IP协议栈和netfilter/IPSec处理流程。而ping这类工具是通过内核协议栈发数据包,会经过IPSec的安全策略(SP)匹配逻辑,所以能正常加密。

具体解决方法

1. 让Scapy通过内核协议栈发送(推荐)

不要手动构造IP层数据包,只写上层协议(ICMP/TCP/UDP),让Scapy调用内核标准套接字发送,由内核负责封装IP头并触发IPSec处理。

示例代码:

from scapy.all import *

# 发送ICMP包:仅构造ICMP层,内核处理IP头和路由
send(ICMP(), dst="目标IP地址", verbose=0)

# 发送TCP SYN包:仅构造TCP层,内核封装IP头
send(TCP(dport=80, flags="S"), dst="目标IP地址", verbose=0)

# 发送UDP包:仅构造UDP层,内核封装IP头
send(UDP(dport=53), dst="目标IP地址", verbose=0)

2. 使用L3RawSocket强制走内核路由

如果必须手动构造IP头,可使用L3RawSocket,它会让数据包经过内核路由表和netfilter钩子(包括IPSec),但要确保IP头参数(如TTL、校验和)符合内核要求。

示例代码:

from scapy.all import *

# 创建L3RawSocket,让数据包走内核IPSec流程
s = L3RawSocket()
# 构造完整IP包后通过该套接字发送
pkt = IP(src="源IP地址", dst="目标IP地址")/ICMP()
s.send(pkt)
s.close()

3. 验证加密是否生效

可以用以下方式确认:

  • 查看IPSec SA流量统计:ip xfrm state(观察bytes和packets数值是否增长)
  • 在目标主机抓包:tcpdump -i 网卡名 esp,检查是否有ESP协议的加密包

注意事项

  • Scapy运行需要root或CAP_NET_RAW/CAP_NET_ADMIN权限
  • 手动构造IP头时,src地址必须是本机有效网卡地址,否则内核可能丢弃数据包
  • 确认IPSec SP规则的源/目标IP、协议类型,和Scapy发送的包完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 02:02:21