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

能否在Windows系统下使用Scapy发送原始TCP数据包?

在Windows上用Python发送自定义TCP数据包(基于Scapy)

核心原理

Windows原生socket库对原始IP套接字(IPPROTO_TCP)有严格限制,无法直接发送带自定义负载的TCP数据包。而Scapy并非依赖原生socket实现,它通过Npcap(或WinPcap)提供的底层网络接口直接操作网卡,绕过了Windows的TCP/IP栈限制,从而能发送完全自定义的TCP数据包。Scapy不会覆盖原生socket库,二者是独立的实现。

实现步骤

1. 安装依赖

  • 先安装Npcap:安装时必须勾选「Install Npcap in WinPcap API-compatible Mode」,确保Scapy能调用其接口。
  • 安装Scapy:执行pip install scapy

2. 示例代码(需管理员权限运行)

以下代码可构造并发送自定义TCP数据包:

from scapy.layers.inet import IP, TCP
from scapy.sendrecv import send

# 构造IP层:指定源IP和目的IP
ip_layer = IP(src="192.168.1.100", dst="192.168.1.1")
# 构造TCP层:自定义端口、标志位、序列号
tcp_layer = TCP(sport=12345, dport=80, flags="S", seq=12345)
# 添加自定义负载内容
payload = b"Custom TCP payload from Scapy"
# 拼接各层数据包
packet = ip_layer / tcp_layer / payload

# 发送数据包,verbose=0关闭冗余输出
send(packet, verbose=0)

3. 关键代码说明

  • IP(src, dst):定义数据包的源IP地址和目标IP地址
  • TCP(sport, dport, flags, seq):自定义TCP的源端口、目的端口、标志位(如"S"代表SYN包,"A"代表ACK包)、序列号
  • /:Scapy专用的协议层拼接语法,按从上到下的层级组合数据包
  • send():用于三层数据包发送,自动处理链路层封装;若需更底层的链路层发送,可使用sendp()

注意事项

  • 必须以管理员身份运行脚本,否则Scapy无法获取网卡操作权限
  • 自定义数据包可能被目标主机的防火墙拦截,需提前做好规则放行

内容的提问来源于stack exchange,提问作者Josiah Yoder --MSOE

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:55:22