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中文社区”微信公众号

相关文章
|
15天前
|
数据可视化 编译器 Python
Manim:数学可视化的强大工具 | python小知识
Manim(Manim Community Edition)是由3Blue1Brown的Grant Sanderson开发的数学动画引擎,专为数学和科学可视化设计。它结合了Python的灵活性与LaTeX的精确性,支持多领域的内容展示,能生成清晰、精确的数学动画,广泛应用于教育视频制作。安装简单,入门容易,适合教育工作者和编程爱好者使用。
77 7
|
1月前
|
JavaScript 前端开发 开发者
探索 DrissionPage: 强大的Python网页自动化工具
DrissionPage 是一个基于 Python 的网页自动化工具,结合了浏览器自动化的便利性和 requests 库的高效率。它提供三种页面对象:ChromiumPage、WebPage 和 SessionPage,分别适用于不同的使用场景,帮助开发者高效完成网页自动化任务。
129 4
|
1月前
|
开发者 Python
探索Python中的列表推导式:简洁而强大的工具
【10月更文挑战第41天】 在编程的世界中,效率与简洁是永恒的追求。本文将深入探讨Python编程语言中一个独特且强大的特性——列表推导式(List Comprehension)。我们将通过实际代码示例,展示如何利用这一工具简化代码、提升性能,并解决常见编程问题。无论你是初学者还是资深开发者,掌握列表推导式都将使你的Python之旅更加顺畅。
|
1月前
|
网络协议 网络安全 数据安全/隐私保护
计算机网络概念:网关,DHCP,IP寻址,ARP欺骗,路由,DDOS等
计算机网络概念:网关,DHCP,IP寻址,ARP欺骗,路由,DDOS等
47 4
|
1月前
|
网络协议 网络安全 数据安全/隐私保护
计算机网络概念:网关,DHCP,IP寻址,ARP欺骗,路由,DDOS等
【10月更文挑战第27天】计算机主机网关的作用类似于小区传达室的李大爷,负责将内部网络的请求转发到外部网络。当小区内的小不点想与外面的小明通话时,必须通过李大爷(网关)进行联系。网关不仅帮助内部设备与外部通信,还负责路由选择,确保数据包高效传输。此外,网关还参与路由表的维护和更新,确保网络路径的准确性。
50 2
|
2月前
|
数据采集 数据可视化 数据挖掘
R语言与Python:比较两种数据分析工具
R语言和Python是目前最流行的两种数据分析工具。本文将对这两种工具进行比较,包括它们的历史、特点、应用场景、社区支持、学习资源、性能等方面,以帮助读者更好地了解和选择适合自己的数据分析工具。
50 2
|
2月前
|
C语言 开发者 Python
探索Python中的列表推导式:简洁而强大的工具
【10月更文挑战第21天】在Python的世界里,代码的优雅与效率同样重要。列表推导式(List Comprehensions)作为一种强大而简洁的工具,允许开发者通过一行代码完成对列表的复杂操作。本文将深入探讨列表推导式的使用方法、性能考量以及它如何提升代码的可读性和效率。
|
2月前
|
自然语言处理 算法 数据挖掘
探讨如何利用Python中的NLP工具,从被动收集到主动分析文本数据的过程
【10月更文挑战第11天】本文介绍了自然语言处理(NLP)在文本分析中的应用,从被动收集到主动分析的过程。通过Python代码示例,详细展示了文本预处理、特征提取、情感分析和主题建模等关键技术,帮助读者理解如何有效利用NLP工具进行文本数据分析。
55 2
|
2月前
|
测试技术 Python
Python MagicMock: Mock 变量的强大工具
Python MagicMock: Mock 变量的强大工具
55 4
|
2月前
|
存储 Python
python数据类型、debug工具(一)
python数据类型、debug工具(一)
下一篇
DataWorks