exploit,Python中文社区专栏作者,入坑Python一年。希望与作者交流或者对文章有任何疑问的可以与作者联系:
QQ:1585173691
Email:[email protected]
起源
最近一直在研究网络协议,为了加深理解就自己构造了数据包发送并用抓包工具进行分析,在研究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地址,如下图
⊙生成器:
关于生成器的那些事儿
⊙爬虫代理:
如何构建爬虫代理服务
⊙地理编码:
怎样用Python实现地理编码
⊙nginx日志:
使用Python分析nginx日志
⊙ 淘宝女郎:
一个批量抓取淘女郎写真图片的爬虫
⊙ IP代理池:
突破反爬虫的利器——开源IP代理池
⊙ 布隆去重:
基于Redis的Bloomfilter去重(附代码)
⊙ 内建函数:
Python中内建函数的用法
⊙ QQ空间爬虫:
QQ空间爬虫最新分享,一天 400 万条数据
⊙ 对象:
Python教你找到最心仪对象
⊙ 线性回归:
在公众号底部回复上述关键词可直接打开相应文章
我 们 终 将 改 变 潮 水 的 方 向
— Life is short,we use Python —