Scapy中发送数据包的函数集合
在 Scapy 中,有多个函数用于发送数据包,每个函数适用于不同的协议层。下面详细解释这些函数及其用途:
send()
用途: 发送数据包到网络(通常用于三层,即网络层)。
适用层: 网络层(第三层),例如 IP 层。
使用场景: 发送 IP 层的数据包,如 TCP/UDP 数据包。
from scapy.all import send, IP, ICMP pkt = IP(dst="8.8.8.8") / ICMP() send(pkt)
sendp()
用途: 发送数据包到网络(用于二层,即数据链路层)。
适用层: 数据链路层(第二层),例如以太网帧。
使用场景: 发送以太网帧或自定义链路层数据包。
from scapy.all import sendp, Ether, ARP pkt = Ether(dst="ff:ff:ff:ff:ff:ff") / ARP(pdst="192.168.1.1") sendp(pkt)
sr()
用途: 发送和接收数据包(通常用于三层,即网络层)。
适用层: 网络层(第三层),例如 IP 层。
使用场景: 发送 IP 层的数据包并接收响应。
返回值: 一个元组,包含
SndRcvList
对象(已发送和收到响应的数据包)和未响应的数据包列表。
from scapy.all import sr, IP, ICMP pkt = IP(dst="8.8.8.8") / ICMP() answered, unanswered = sr(pkt)
sr1()
用途: 发送一个数据包并接收一个响应(通常用于三层,即网络层)。
适用层: 网络层(第三层),例如 IP 层。
使用场景: 发送 IP 层的数据包并接收第一个响应。
返回值: 接收到的第一个响应数据包。
from scapy.all import sr1, IP, ICMP pkt = IP(dst="8.8.8.8") / ICMP() response = sr1(pkt)
srp()
用途: 发送和接收数据包(用于二层,即数据链路层)。
适用层: 数据链路层(第二层),例如以太网帧。
使用场景: 发送以太网帧或自定义链路层数据包并接收响应。
返回值: 一个元组,包含
SndRcvList
对象(已发送和收到响应的数据包)和未响应的数据包列表。
from scapy.all import srp, Ether, ARP pkt = Ether(dst="ff:ff:ff:ff:ff:ff") / ARP(pdst="192.168.1.1") answered, unanswered = srp(pkt)
srp1()
用途: 发送一个数据包并接收一个响应(用于二层,即数据链路层)。
适用层: 数据链路层(第二层),例如以太网帧。
使用场景: 发送以太网帧或自定义链路层数据包并接收第一个响应。
返回值: 接收到的第一个响应数据包。
from scapy.all import srp1, Ether, ARP pkt = Ether(dst="ff:ff:ff:ff:ff:ff") / ARP(pdst="192.168.1.1") response = srp1(pkt)
srloop()
用途: 循环发送数据包并接收响应(通常用于三层,即网络层)。
适用层: 网络层(第三层),例如 IP 层。
使用场景: 连续发送相同的数据包并接收响应,适合网络扫描或稳定性测试。
from scapy.all import srloop, IP, ICMP pkt = IP(dst="8.8.8.8") / ICMP() srloop(pkt, count=5)
srploop()
用途: 循环发送数据包并接收响应(用于二层,即数据链路层)。
适用层: 数据链路层(第二层),例如以太网帧。
使用场景: 连续发送相同的数据包并接收响应,适合数据链路层的网络扫描或稳定性测试。
from scapy.all import srploop, Ether, ARP pkt = Ether(dst="ff:ff:ff:ff:ff:ff") / ARP(pdst="192.168.1.1") srploop(pkt, count=5)