Scapy 是一个强大的 Python 网络安全库,专门用来处理网络数据包。抓包、发送包、修改包,甚至直接攻击模拟,Scapy 都能轻松搞定。别被它听起来高大上的功能吓到,实际上它用起来比你想象的简单。今天咱们直接来几个实用技巧,学会之后,可能会让你怀疑之前用 Wireshark 的那些日子到底浪费了多少时间。
1. 捕获网络数据包:网络侦探的第一步
网络分析,第一步就是“抓包”。Scapy 让这事儿变得简单到离谱,几行代码搞定。
from scapy.all import sniff
# 抓取 5 个数据包
packets = sniff(count=5)
packets.summary()
运行这段代码后,Scapy 会嗅探你当前网络接口上的数据包(默认接口)。抓到 5 个包后,它就停下来了,还会用 summary()
给你一个简单的概览。
实际应用:
• 你想看看某个应用程序发出的流量吗?直接跑这段代码。
• 比如怀疑某设备在偷偷发数据包?抓一抓,立刻现原形。
温馨提示:
抓包权限需要管理员权限。所以在运行脚本前,确保你有足够的权限,否则会报错。
2. 解析数据包:看清楚每一层的内容
抓到包之后,单纯看个列表没啥意义,真正的价值是解析每一个包的内容。Scapy 的数据包结构非常直观,分层设计,支持直接访问。
from scapy.all import sniff
# 抓一个包
packet = sniff(count=1)[0]
# 展示包的详细内容
print(packet.show())
show()
会打印出数据包的每一层结构,比如 IP 层、TCP 层、Payload(负载)等。
想直接访问某一层的数据?简单得不得了:
# 获取 IP 层信息
print(packet[IP].src) # 源 IP 地址
print(packet[IP].dst) # 目标 IP 地址
实际应用:
• 分析恶意流量,看看谁在攻击你。
• 检查网络通信,排查某些异常包的具体内容。
温馨提示:
如果抓到的是一个 UDP 包,而你试图访问 TCP 层,那肯定会报错。所以在访问之前,最好先看看包的类型。
3. 构造和发送数据包:自己动手,造个“包”试试
网络分析不光是被动抓包,有时候也需要主动出击,比如模拟某个流量测试网络设备。Scapy 提供的包构造功能让你瞬间化身“网络工匠”。
from scapy.all import IP, ICMP, send
# 创建一个 ICMP 数据包(类似 ping)
packet = IP(dst=“8.8.8.8”) / ICMP()
send(packet)
这段代码会向 Google 的公共 DNS 服务器发送一个 ICMP 包(俗称 Ping)。是不是比用命令行的 ping
命令看起来酷多了?
实际应用:
• 测试某个服务器是否在线。
• 模拟攻击流量,研究防火墙的响应方式。
温馨提示:
随意构造包发送到网络上有可能违反一些网络安全法规。确认你有合法的测试权限再动手(别问我怎么知道的)。
4. 过滤数据包:只抓你想要的
无脑抓包会让你被无数没用的数据淹没。Scapy 支持 BPF(Berkeley Packet Filter)语法,可以精确过滤出你想要的包。
from scapy.all import sniff
# 只抓 TCP 包,且目标端口是 80 的
packets = sniff(filter=“tcp port 80”, count=5)
packets.summary()
比如上面这段代码,只会抓 HTTP 流量(目标端口是 80)。BPF 的语法有点像 SQL,学起来也不难。
实际应用:
• 分析 HTTP 请求,看看网站的具体通信内容。
• 只想抓 DNS 流量?
filter=“udp port 53”
直接搞定。
温馨提示:
BPF 是由底层网络驱动实现的,效率非常高,但语法相对固定,需要查文档或者 Google。
5. 保存和读取 pcap 文件:不怕错过任何关键数据
抓到的数据包别急着扔,随手存起来,下次还能用。Scapy 支持 pcap 格式的文件(Wireshark 也用这个格式),随时保存和读取。
保存 pcap 文件:
from scapy.all import sniff, wrpcap
# 抓 10 个包并保存到文件
packets = sniff(count=10)
wrpcap(“output.pcap”, packets)
读取 pcap 文件:
from scapy.all import rdpcap
# 读取保存的包
packets = rdpcap(“output.pcap”)
print(packets.summary())
实际应用:
• 抓包后保存,方便后续分析。
• 导入 Wireshark 做更复杂的流量可视化。
温馨提示:
文件名最好带 .pcap
后缀,这样导入到其他工具里会更方便。
一点小结:Scapy 不止是工具,更是网络分析的艺术
Scapy 的魅力在于,它能让你用最少的代码完成很多高难度的网络分析任务。抓包、解析、发送、过滤、保存,每一个功能都简单直接。如果用好这些技巧,你会发现网络分析其实没那么神秘,甚至有点好玩。
记住,学会工具只是第一步,接下来是用它解决问题。用 Scapy,网络世界的大门随时为你敞开。