Scapy 是一个强大的 Python 网络安全工具,可以用于创建、发送和修改网络数据包。让我们来探讨一下如何使用 Scapy 修改数据包吧!
- 构造数据包: Scapy 采用分层的方式构造数据包。最底层是 Ether,然后是 IP,再之后是 TCP、UDP。你可以使用“类+属性”的方式构造数据包,每一个网络协议都对应一个类,而属性则是协议中的字段。例如,构造一个含有 IP 协议的数据包:
Python
from scapy.all import IP pkt = IP() # 构造含有 IP 协议的包 print(pkt)
- 查看协议字段: Scapy 内部实现了大量的协议,例如 DNS、ARP、IP、TCP、UDP 等。你可以使用
ls()
函数查看数据包格式的属性列表,以便更好地了解每个协议的字段:
Python
from scapy.all import IP, ls pkt = IP() ls(pkt) # 查看 IP 协议的字段
- 发送和接收数据包:
- 使用
send()
函数发送 IP 数据包:
Python
from scapy.all import IP, send pkt = IP(dst="192.168.91.1") / ICMP() send(pkt)
- 使用
sendp()
函数发送 Ether 数据包(以 MAC 地址作为目标):
Python
from scapy.all import Ether, sendp pkt = Ether(dst="fe80::5d3f:470f:26b7") sendp(pkt)
- 使用
sr()
函数接收应答的数据包:
Python
from scapy.all import IP, sr pkt = IP(dst="192.168.91.1") / ICMP() ans, unas = sr(pkt) ans.summary()