交换网络中的sniffer讨论-基于交换网络的ARP spoofing sniffer

交换网络中的sniffer讨论->基于交换网络的ARP spoofing sniffer

转自--http://blog.csdn.net/zhangnn5/article/details/6810347

在阅读这篇文章之前,我假设你已经知道TCP/IP协议,ARP协议,知道什么是sniffer等基本网络知识。
在一般的局域网里面,经常会有两种接入方式,一种是HUB接入(这里的HUB是指普通HUB),一种是交换机直接接入(这里的交换机是比较高级的交换机,老式交换机不在此列)。采用HUB方式接入的网络,数据传送的时候,是采用广播的方式发送,这个时候,只要一台主机将自己的网卡设置成混杂模式(promiscuous mode),就可以嗅探到整个网络的数据。 此篇文章不打算讨论这种网络环境的嗅探(sniffer)和反嗅探(anti sniffer)方法,主要是想就交换机方式直接接入的网络环境如何sniffer以及如何anti sniffer做一个比较粗浅的分析。

我们知道,一台计算机想要接入到网络中,必须要有两个地址。一个是网卡的地址,我们称之为MAC地址,它是固化在网卡中的。在以太网中,我们通过MAC地址来进行数据传送和数据交换。在以太网环境中,数据会分帧传送,每一个数据帧都会包含自己的MAC和目的MAC地址信息; 另外一个地址是平时所说的IP地址,定义在网络层,每一台网络计算机都会有一个或者多个IP地址,这是一个虚拟的数据,并且可以随时更改。IP地址和MAC地址是同时使用的,在数据传送过程中,一个完整的TCP/IP包需要由以太网进行数据封装,数据分帧,最后再通过物理层传输到目标计算机。在以太网封装上层的TCP/IP包的时候,它需要知道源MAC地址和目的MAC地址,但是我们只能给出一个对方的IP地址,这个时候就需要一个协议来支持IP到MAC的转换,这就是ARP,Address Resolution Protocol. 在局域网中,ARP是通过广播的方式来发送的,比如,我的机器IP是192.168.7.110(A),需要知道192.168.7.119(B)机器的MAC地址,那从A机器就会广播一个ARP包,这个包里带有B机器的IP,如果B机器收到了此ARP包,那么他就会同样返回一个ARP包,里面带有响应的MAC地址。A收到这个ARP包后,得到B的MAC地址,这个时候以太网就可以开始封装TCP/IP包了,可以开始正常的数据传送了。比如:

d:\>arp -a

view plain
  1. Interface: 192.168.7.110 on Interface 0x1000003  
  2. Internet Address Physical Address Type  
  3. 192.168.7.1 00-90-0b-01-a0-61 dynamic  
  4.   
  5. d:\>ping 192.168.7.119  
  6.   
  7. Pinging 192.168.7.119 with 32 bytes of data:  
  8.   
  9. Reply from 192.168.7.119: bytes=32 time<10ms TTL=128  
  10.   
  11. Ping statistics for 192.168.7.119:  
  12. Packets: Sent = 1Received = 1Lost = 0 (0% loss),  
  13. Approximate round trip times in milli-seconds:  
  14. Minimum = 0msMaximum = 0msAverage = 0ms  
  15. Control-C  
  16. ^C  
  17. d:\>arp -a  
  18.   
  19. Interface: 192.168.7.110 on Interface 0x1000003  
  20. Internet Address Physical Address Type  
  21. 192.168.7.1 00-90-0b-01-a0-61 dynamic  
  22. 192.168.7.119 00-d0-59-26-df-1a dynamic  


可以清楚的看到,在未和192.168.7.119通讯之前,本机是没有该IP对应MAC地址的,但一旦通讯后,我们就知道了对方的MAC地址,windows会将对方MAC地址存在自己的ARP cache里面。
为了节省网络资源以及通讯时间,多数操作系统会保留一张ARP缓存表,里面记录曾经访问的IP和MAC地址影射记录,一旦局域网中有一个新的ARP广播,对应一个IP到MAC的记录,这个ARP缓存表就会被刷新,MAC地址会更换成新的广播包里定义的MAC地址,这个时候就存在一个问题,在更新的时候,系统并没有去检查是否真的是由该机器广播出来的,局域网中的恶意用户就会利用欺骗的方式来更改网络途径,将真正的MAC地址替换成自己的MAC地址,这种方法称之为:ARP spoofing。
交换机在处理数据的时候,它会根据自己机器内部的一个MAC到端口的数据表来查询符合要求的MAC地址数据包该发往哪个端口。这张表从交换机开机的时候就存在,在每个端口第一次数据传送的时候就会记录对应的端口的MAC地址. 通过发送我们伪造的MAC地址数据包到交换机,就可以欺骗交换机刷新自己的MAC地址到端口的数据表,假设A主机连接在2口,假设我在4口,要sniffer A主机的数据,那么我就需要伪造一个ARP数据包,告诉交换机A主机MAC地址是在4口,那么交换机就会将本来发送到A主机的数据会转送到4口上,这个时候我就可以监听到了A主机的数据传送了,这个就是基于交换网络的arp欺骗sniffer过程。
通过arp 欺骗,一般sniffer有几个方法:
1. 就是上面介绍的欺骗MAC进行数据窃听,但由于A收不到数据,这样它会重新发布ARP包,这样导致sniffer很容易暴露,而且效果不好,A会丢包,同样你的sniffer 一样不会抓到全部的数据。
2. 发起"中间人"窃听。攻击者可以在两台通讯主机之间插入一个中转回路,这样,攻击者既可以sniffer到两机的数据,同样还可以不影响两机的通讯。我们假设X是攻击者的机器,A和B是目标机器。
X如果想发起攻击,首先在向A主机发送一个ARP包,让A认为B机器IP对应的MAC地址是X主机的,同时再向B机器发送一个ARP包,让B机器认为A机器IP对应的MAC地址是X主机的,如下图:

3. MAC flood攻击
通过快速(比如超过1000线程) 发送大量伪造MAC地址数据包,会造成交换机的MAC-端口表塞满,但为了正常数据不被丢弃,大多数交换机会采取类似HUB一样方式:广播的方式发送数据。这个时候,再在网络中任何一台机器设置网卡为混杂模式,就可以sniffer到任何想要监听的数据了。
*注: 以上方法我并没有正式测试过,理论上可行,实际上还有待验证。
上面介绍了几种常见的基于switch网络的arp spoofing sniffer方法,那么对于一个管理员来说,如何防范这种方式的数据嗅探呢?
严格来说,没有一种通用的方法来解决arp欺骗造成的问题,最大的可能就是采用静态的ARP缓存表,由于静态的ARP表不可以刷新,那么伪造的ARP包将会被直接丢弃。但这样造成的问题就是,整个网络中的所有机器,都必须要建立一个静态的MAC表,在大型网络中,会增加交换机的负担,造成效率下降。如果机器更换,那么就要手工去更改MAC地址表,很显然,在大型网络中这种方式是不适用的。
在这里需要注意的是,windows下即使你建立了静态的MAC到IP的影射表,但是在收到了强制更新的ARP包后,依然会刷新机器的影射表,一样会被sniffer到。
高级交换机还提供了MAC绑定功能,指定交换机某个端口和某个MAC绑定,这种方法可以很有效的防止MAC克隆(clone)方式的窃听,但是对于上述的arp 欺骗攻击效果不大。
最可靠的方法就是采用第三方软件来解决,Arpwatch是一个运行在Unix平台下的免费工具,他可以检测到网络中所有MAC地址的变化,一旦网络中的MAC地址有变化,它就会发送一封email到指定地点。

后记:这篇小文写的很简短,其实在交换网络中还有其他几种攻击方法,比如MAC clone等,而且交换网络中的sniffer方法还不止这一种,我这里只是介绍最常见,容易发生和编程实现的sniffer方法,希望对大家有所帮助。本人水平有限,如有错误,请不吝指责

posted on 2011-10-26 10:22 linyawen 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/linyawen/archive/2011/10/26/2224828.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297925.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mendelay为什么安装不了_你为什么消防验收过不了?消防管道安装错误图集

来源&#xff1a;水电工论坛如有侵权&#xff0c;请联系删除消防管道安装如果一次没做好&#xff0c;验收不通过的话重新返工将对工程进度造成很大的影响&#xff0c;所以在施工时一定要注意以下的错误一定不能出现。2个沟槽卡箍间管段未设置支架立管角钢支架安装时应平面朝上管…

.NET 6 中的HTTP 3支持

dotnet团队官方博客发布了一篇HTTP3的文章&#xff1a;HTTP/3 support in .NET 6&#xff1a;https://devblogs.microsoft.com/dotnet/http-3-support-in-dotnet-6/。文章介绍了.NET 6 将预览支持HTTP3&#xff0c;.NET 7正式支持HTTP3&#xff0c;原因主要是HTTP/3 的 RFC 尚未…

JavaScript数组sort方法(数组排序)

数组对象的sort方法可以按照一定的顺序把数组元素重新排列起来。通常情况下&#xff0c;都是按照字母顺序排列的。JavaScript代码 <script type"text/javascript"> var arr ["HTML","CSS","JavaScript","DOM"]…

Lock与synchronized 的区别

2019独角兽企业重金招聘Python工程师标准>>> 多次思考过这个问题&#xff0c;都没有形成理论&#xff0c;今天有时间了&#xff0c;我把他总结出来&#xff0c;希望对大家有所帮助 1、ReentrantLock 拥有Synchronized相同的并发性和内存语义&#xff0c;此外还多了 …

python从入门到实践django_Django入门——《Python编程从入门到实践》

Django是一个Web框架——一套用于帮助开发交互式网站的工具。Django能够响应网页请求&#xff0c;还能让你更轻松地读写数据库、管理用户等。1、建立项目开始编写一个名为“学习笔记”的Web应用程序&#xff0c;让用户能够记录感兴趣的主题&#xff0c;并在学习每个主题的过程中…

linux 内核 三天吐血,编译安装——吐血经验,内附脚本

程序包编译安装&#xff1a;源码包&#xff1a;name-VERSION-release.src.rpmrpm由源码包安装后&#xff0c;使用rpmbuild命令制作成二进制格式的rpm包&#xff0c;而后再安装源代码–> 预处理–> 编译(gcc)–> 汇编–> 链接–> 执行源代码组织格式&#xff1a;…

mac编辑器coda使用小贴条

前言&#xff1a;最近用mac开发环境了&#xff0c;自然一天到晚用coda&#xff0c;可总是有不顺的地方&#xff0c;搜到这篇文章感觉像看到了知音人&#xff0c;实在是解决了我不少疑难问题啊。外文针对的coda版本较低&#xff0c;我总结的针对版本是version1.7.3 coda快捷键操…

我在 GitHub 上发现了一款骚气满满的字体!

全世界只有3.14 % 的人关注了爆炸吧知识转自&#xff1a;量子位&#xff0c;作者&#xff1a;栗体这个字体叫 Leon Sans&#xff0c;表面看去平平无奇。但事实上&#xff0c;它并不是普通的字体&#xff0c;体内蕴藏着魔力。Leon Sans 最特别的地方在于&#xff0c;字体是由代码…

PHP 接收 UDP包_php只能做网站?基于swoole+websocket开发双向通信应用

前言众所周知&#xff0c;PHP用于开发基于HTTP协议的网站应用非常便捷。而HTTP协议是一种单向的通信协议&#xff0c;只能接收客户端的请求&#xff0c;然后响应请求&#xff0c;不能主动向客户端推送信息。因此&#xff0c;一些实时性要求比较高的应用&#xff0c;如实时聊天、…

OSI模型数据链路层为什么需要分层?

1.何为数据链路层的&#xff08;DATA LINK LAYER&#xff09;的MAC子层和LLC子层&#xff1f; MAC子层的主要功能包括数据帧的封装/卸装&#xff0c;帧的寻址和识别&#xff0c;帧的接收与发送&#xff0c;链路的管理&#xff0c;帧的差错控制等。MAC子层的存在屏蔽了不同物理链…

WPF 实现火炬效果

WPF开发者QQ群&#xff1a; 340500857 | 微信群 -> 进入公众号主页 加入组织欢迎转发、分享、点赞、在看&#xff0c;谢谢~。 01—效果预览02—代码如下一、FireControl.cs 代码如下using System; using System.Collections.Generic; using System.Linq; using System.Tex…

08 comet反向ajax

一&#xff1a;HTTP协议与技久链接分块传输---->反向ajax 反向ajax又叫comet, server push,服务器推技术. 应用范围: 网页聊天服务器,, 新浪微博在线聊天,google mail 网页聊天,都有用到. 原理: 一般而言, HTTP协议的特点, 连接<->断开. 具体什么时间断开? 服务器响应…

男朋友出的性格测试题

1 一家人出去玩了三天&#xff0c;把猫忘在家里了&#xff01;2 嗷呜3 竟然毫无违和感4 叫你一声造句鬼才不过分吧5 秋天原来是这样来的嘛~6 当代嗑cp网友现状5 现在的年轻人都哪里学来的这么多招数内容自沙雕男友的日常你点的每个赞&#xff0c;我都认真当成了喜欢

杂项记录

http://poj.org/ 算法 线性代数 编译原理 算法导论 算法&#xff08;软件设计师教程&#xff09; 《ACM国际大学程序设计竞赛亚洲区预选赛真题题解》转载于:https://www.cnblogs.com/end/archive/2011/10/29/2228940.html

linux连接建立的时间,用timedatectl在Linux中检查当前时区及更改时区(创建符号链接来更改时区)...

本文介绍如何在Linux操作系统中设置或更改时区的方法&#xff0c;可以使用timedatectl&#xff0c;包括通过创建符号链接来更改时区。前言时区是具有相同标准时间的地理区域&#xff0c;通常&#xff0c;时区是在操作系统的安装过程中设置的&#xff0c;但以后可以轻松更改。对…

python能不能自动写代码_微软最强 Python 自动化工具开源了!不用写一行代码

1. 前言最近&#xff0c;微软开源了一款非常强大的 Python 自动化依赖库&#xff1a;playwright-python&#xff0c;它支持主流的浏览器&#xff0c;包含&#xff1a;Chrome、Firefox、Safari、Microsoft Edge 等&#xff0c;同时支持以无头模式、有头模式运行&#xff0c;play…

mapbox 导航_狂甩不掉,骑行最稳手机支架!一体式安装太方便,秒变单车导航仪...

发对于骑行爱好者而言&#xff0c;对手机支架的稳固性有很高的要求&#xff0c;同时支架体积不能太大&#xff0c;对手机本身也要有一定的保护性&#xff0c;手机安放好&#xff0c;骑行才能更自在&#xff01;一个舒适的手机支架&#xff0c;对于业务繁忙或者像小渣一样的路痴…

Docker小白到实战之Docker网络简单了解一下

前言现在对于Docker容器的隔离性都有所了解了&#xff0c;但对容器IP地址的分配、容器间的访问等还是有点小疑问&#xff0c;如果容器的IP由于新启动导致变动&#xff0c;那又怎么才能保证原有业务不会被影响&#xff0c;这就和网络有挂钩了&#xff0c;接下来就大概说说。正文…

(三)java的数据类型

java是一种强类型的语言&#xff0c;所谓强类型&#xff0c;意味着每个变量都要有确定的类型&#xff0c;每个表达式也要有明确的类型&#xff0c;包括传递的某些参数。java中从大的方面分有两大数据类型&#xff0c;分别是基本数据类型和引用数据类型&#xff0c;基本数据类型…

遍历DataTable内存数据的三种方法性能对比

http://www.cnblogs.com/guowei1027/archive/2009/12/15/1624699.html 前几年曾经碰到一个生成递归树形菜单的功能&#xff0c;由于系统比较庞大&#xff0c;有300-400个菜单项&#xff0c;把这些菜单一次性递归加载&#xff0c;的确需要耗费一些时间。 当然若是动态加载什么的…