pythonarp工具_Python写ARP局域网主机存活扫描与ARP欺骗工具-阿里云开发者社区

起源

最近一直在研究网络协议,为了加深理解就自己构造了数据包发送并用抓包工具进行分析,在研究arp协议时顺便写了一个简单的类似网络剪刀手的小脚本用于测试,下面开始我们的arp研究吧。

简单协议分析

网络协议大致分为应用层•传输层•网路层•链路层,以http为例,传输层封装tcp头,网络层封装ip头,链路层封装以太头(如下图所示),而arp报文就是包含在链路层以太帧的数据包里面,下面我们来讲讲以太帧格式。

以太帧

以太帧工作在链路层,以太帧格式多达五种,但今天的tcp/ip应用都是用Ethernet V2格式,下面我们分析Ethernet V2格式(如图),各数据段的解释图上也标出来了,其中“类型”是指明上层协议,0x800代表网际协议,0x0806代表arp协议

下面我用wireshark抓一个arp回复包来分析一下是否能与上面数据格式对应上(如下面截图)此处wireshark把前导码与CRC包给丢弃了,截图中的“数据”里面就包含着我们要研究的arp报文

Arp报文数据结构的研究

Arp报文数据结构就是对上面截图中“数据”的具体研究,arp报文格式如下图,操作类型有四种,这里只讲arp的两种:1表示发送的包为请求包,2表示发送的包为回复包:

下面我用wireshark对上面截图“数据”展开进行研究:

好,说了这么多我们下面来讲讲arp欺骗的原理吧!

Arp欺骗

两台计算机通信需要ip地址与mac地址,此时把两台计算机当作快递的起始站和终点站,要传送的数据当作你要邮寄的物品,那么ip地址就相当于起始站的寄件地址和终点站的收件地址,而mac地址就相当于中间要经过的中转站地址。当一个数据发出后,要经过一个一个mac中转站才能到达终点站。

(1)此时如果你把起始站要发往中转站的mac地址改为你的mac地址,那么起始站的数据包就直接发到你手中,如果你做一个路由转换,再转换到正确的mac地址,那么起始站能正常收发邮件,而你却能看其中的内容,如果不做路由转换便实现了断网功能

(2)如果你把mac中转站(网关)要发往起始站的mac地址改为你的mac地址,那么回复的请求包就发到你手中,起始站就得不到回复包,实现断网功能。

方法一是欺骗目标机,修改目标机的mac缓存表,如果目标机有arp防火墙便成功不了;

方法二是欺骗路由器,修改路由器的mac缓存表,即使目标机有arp防火墙,也能实现断网功能,因为目标机的mac缓存表并没有修改

Arp协议是一个不安全的协议,只要你发送数据包就能修改目标的mac缓存表,基于这种不安全性,便能实现arp欺骗。

Python写arp欺骗工具

思路(及数据包的构造):不断发送修改对方mac缓存表的arp

欺骗目标机:以太头:本机mac•目标机mac数据(Arp包):目标机mac•目标机ip•操作类型请求或回复都行•本机mac•网关ip

欺骗路由器:以太头:网关mac•本机mac数据(arp包):网关mac•网关ip•操作类型请求或回复都行•本机mac•目标机ip

Arp主机存活扫描

遍历你要扫描的ip段地址并发送一个广播mac地址的请求包,收到回复则代表这台主机存活,并打印其ip地址及mac地址,用于arp欺骗。

Python写扫描工具

思路:

以太头:本机mac•ff:ff:ff:ff:ff:ff

数据:00:00:00:00:00:00(因为不知道目标mac于是用0填充)•目标机ip(一个一个遍历)•操作类型请求•本机mac•本机ip

具体代码如下:

代码效果(以欺骗目标机为例):

注意

使用arp欺骗路由器时,不能用本机和虚拟机做路由欺骗实验,因为无论你怎么分配虚拟机mac地址,在路由器上的mac缓存表中本机和虚拟机mac地址都是用的本机mac地址,如下图

原文发布时间为:2016-12-03

本文作者:exploit

本文来自云栖社区合作伙伴“Python中文社区”,了解相关信息可以关注“Python中文社区”微信公众号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值