使用arp欺骗,可以跨冲突域抓包吗( 二 )


3.1.3 构造ARP欺骗数据包我们先完成第一个目标,告诉目标主机192.168.1.18网关的地址为Kali Linux所在主机的地址:192.168.1.102。
在程序的顶部,我们先导入scapy。
import sysimport timefrom scapy.all import ( get_if_hwaddr, getmacbyip, ARP, Ether, sendp)注意这里面的几个方法,get_if_hwaddr为获取本机网络接口的函数,getmacbyip是通过ip地址获取其Mac地址的方法,ARP是构建ARP数据包的类,Ether用来构建以太网数据包,sendp方法在第二层发送数据包。
我们先解下Ether的参数:
使用arp欺骗,可以跨冲突域抓包吗

图6
dst : DestMACField = (None)src : SourceMACField = (None)type : XShortEnumField = (36864)构造一个以太网数据包通常需要指定目标和源MAC地址,如果不指定,默认发出的就是广播包,例如:
使用arp欺骗,可以跨冲突域抓包吗

图7
再来了解下ARP类构造函数的参数列表:
使用arp欺骗,可以跨冲突域抓包吗

图8
hwtype : XShortField = (1)ptype : XShortEnumField = (2048)hwlen : ByteField = (6)plen : ByteField = (4)op : ShortEnumField = (1)hwsrc : ARPSourceMACField = (None)psrc : SourceIPField = (None)hwdst : MACField = (\u0026#39;00:00:00:00:00:00\u0026#39;)pdst : IPField = (\u0026#39;0.0.0.0\u0026#39;) 【使用arp欺骗,可以跨冲突域抓包吗】 构造ARP需要我们注意的有5个参数:
l op。取值为1或者2,代表ARP请求或者响应包。l hwsrc。发送方Mac地址。l psrc。发送方IP地址。l hwdst。目标Mac地址。l pdst。目标IP地址。定向欺骗现在来构造数据包就很容易了,回到我们最初的目标,我们想告诉192.168.1.23这台主机网关地址为192.168.1.102所在的主机,构造的数据包应该是这样的:
pkt = Ether(src=https://www.zhihu.com/api/v4/questions/35031522/, dst=) / ARP(1.102的MAC, 网关IP地址,hwdst=1.18MAC, pdst=1.18IP地址, op=2)上面的代码我们不论是以太网数据包还是ARP数据包,我们都明确指定了来源和目标,在ARP数据包中,我们将Kali Linux的Mac地址和网关的IP地址进行了绑定,op取值为2,作为一个响应包被1. 18接到,这样1. 18会更新自己的ARP缓存表,造成中毒,从而1. 18发往网关的数据包都会被发往1.102。
那么我们如果要欺骗网关,把网关发往1.18的数据包都发送到Kali Linux(1.102)上,根据上面的代码稍作修改即可:
pkt = Ether(src=https://www.zhihu.com/api/v4/questions/35031522/, dst=) / ARP(1.102的MAC, 1. 18地址, hwdst=网关MAC,pdst=网关IP地址, op=2)上面构造的两个数据包都是ARP响应包,其实发送请求包也可以进行毒化,请求包毒化的原理是,我们请求时候使用假的源IP和MAC地址,目标主机同样会更新自己的路由表。


推荐阅读