🌐 1、简述
Scapy 是一个强大的 Python 网络交互与安全工具库,它允许你:
- 支持数百种协议(IP、TCP、UDP、ICMP、ARP、DNS、HTTP 等)
- 可进行网络扫描、路由追踪、入侵检测、协议 fuzz 测试
- 可替代部分
tcpdump、nmap 等工具的功能
一句话总结:
★Scapy = Python 写的 tcpdump + nmap + Wireshark + 自定义注入工具

2、安装方法
pip install scapy
推荐在 Linux/macOS 使用,因为 Scapy 涉及底层网络操作,可能需要管理员权限(Windows 支持有限)。
核心功能
| |
|---|
| |
| |
| |
| |
| 支持解析 IP/TCP/UDP/ICMP/ARP/DNS/HTTP 等 |
3、实践样例
1️⃣ 抓取数据包
from scapy.all import sniff
defpacket_callback(packet):
print(packet.summary())
# 抓取 5 个数据包
packets = sniff(count=5, prn=packet_callback)
2️⃣ 构造并发送 ICMP Ping 包
from scapy.all import IP, ICMP, sr1
packet = IP(dst="8.8.8.8")/ICMP()
reply = sr1(packet, timeout=2)
if reply:
print(f"收到回应: {reply.src}")
else:
print("无回应")
3️⃣ ARP 扫描局域网
from scapy.all import ARP, Ether, srp
target = "192.168.1.0/24"
arp = ARP(pdst=target)
ether = Ether(dst="ff:ff:ff:ff:ff:ff")
packet = ether/arp
result = srp(packet, timeout=2, verbose=0)[0]
print("局域网主机:")
for sent, received in result:
print(f"IP: {received.psrc}, MAC: {received.hwsrc}")
4️⃣ Traceroute 路由追踪
from scapy.all import traceroute
res, unans = traceroute(["8.8.8.8"], maxttl=20)
res.show()
5️⃣ DNS 查询
from scapy.all import IP, UDP, DNS, DNSQR, sr1
query = IP(dst="8.8.8.8")/UDP(dport=53)/DNS(rd=1, qd=DNSQR(qname="www.google.com"))
response = sr1(query, verbose=0)
print(response[DNS].summary())
6️⃣ 简单的 TCP 端口扫描
from scapy.all import IP, TCP, sr1
target = "scanme.nmap.org"
ports = [22, 80, 443]
for port in ports:
pkt = IP(dst=target)/TCP(dport=port, flags="S")
resp = sr1(pkt, timeout=1, verbose=0)
if resp and resp.haslayer(TCP) and resp.getlayer(TCP).flags == 0x12:
print(f"端口 {port} 开放")
else:
print(f"端口 {port} 关闭/过滤")
4、实际应用场景
- 📡 渗透测试:扫描端口、ARP 欺骗、中间人攻击演示
- 🧪 协议 Fuzz:自动化构造异常数据包,测试防火墙/服务稳定性
- 🖥️ 教学演示:展示 TCP 握手、ARP 通信等网络原理
Scapy vs 其他工具
| |
|---|
| tcpdump | |
| Wireshark | |
| nmap | |
| Scapy | |
5、总结
- 它不仅能替代部分
nmap、tcpdump 功能,还能自定义构造协议包,灵活性极高 - 适用于 安全研究、渗透测试、教学演示、网络诊断 等多种场景
📚 参考资料
- 官方文档:https://scapy.readthedocs.io/
- GitHub 项目:https://github.com/secdev/scapy