参考书籍:python渗透测试编程技术方法与实践
参考文档:https://github.com/Larryxi/Scapy_zh-cn/blob/master/README.md(Scapy中文使用文档)
本文为作者学习文章,按作者习惯写成,如有错误或需要追加内容请留言(不喜勿喷)
本文为追加文章
scapy包含大量的网络协议(DNS、ARP、IP、TCP、UDP等)
from scapy.all import * #来自scapy.all文件,导入所有函数
python交互模式中:ls (*) *=Ether、IP、ICMP、TCP、UDP、ARP 等等,查看可以配置的参数
二层:
Ether = Ether(src="源mac",dst="目的mac")
#构造数据包源mac地址表示**发送数据的主机mac**,目的mac地址表示**数据发送到的主机mac**
三层:
ip = IP(src="源IP地址", "dst=目的IP地址", ttl=32)
#构造数据包源IP地址表示**发送数据的主机**,目的IP地址表示**数据发送到的主机**
ARP = ARP(hwsrc='二层源mac', psrc='三层源IP', hwdst='二层目的mac', pdst='三层目的IP')
TCP = TCP(sport="源端口号", dport="目的端口号")
#源端口号表示**数据发送时来自的端口**,目的端口号表示**数据将被目的主机的哪个端口接收**
UDP = UDP(sport="源端口号", dport="目的端口号")
#源端口号表示**数据发送时来自的端口**,目的端口号表示**数据将被目的主机的哪个端口接收**
注: 构建二层包:(以Ether层开头)
如:pkt=Ether/(IP or ARP) #构建IP数据包或者ARP数据包
构建三层包:(以IP层开头)
如:pkt=IP/(ICMP or TCP or UDP) #构建ICMP数据包、TCP数据包、UDP数据
sendp() #**二层数据包** #如:sendp( Ether() / ARP() )
send() #**三层数据包** #如:send( IP() / ICMP() )
只发送数据包不接送返回的数据
数据包发送:
sendp(pkt, iface="eth1") #pkt(构建包的变量);iface(数据发送的接口)
二层:
srp() #发送包, 返回回复的数据包和没有回复数据包的数量
srp1() #发送包, 返回只回复或者发送数据包的详细信息及参数,显示这个参数的返回数据
二层数据包发送:
srp1(pkt, timeout=1) #pkt(构建包的变量);timeout=1(超时1秒就丢弃,实际时间看程序处理能力而定)
三层:
sr() #发送包, 返回回复的数据包和没有回复数据包的数量
sr()返回一对列表,第一个就是发送的数据包及其应答组成的列表,第二个是无应答数据包组成的列表。
sr1() #发送包, 返回只回复或者发送数据包的详细信息及参数,显示这个参数的返回数据
三层数据包发送:
sr1(pkt, timeout=1) #pkt(构建包的变量);timeout=1(超时1秒就丢弃,实际时间看程序处理能力而定)