基于ARP欺骗的网络监听原理及实现_第1页
基于ARP欺骗的网络监听原理及实现_第2页
基于ARP欺骗的网络监听原理及实现_第3页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于ARP欺骗的网络监听原理及实现

随着计算机网络技术的高速发展,网络正日益成为政治、经济、文化、生活中不可缺少的一部分.在它给人们的生活、学习、工作带来前所未有的方便和机遇的同时,由于网络自身固有的不安全性,网络安全问题也越来越引起人们的关注.所谓网络监听,即将网络上传输的数据捕获并进行分析的行为.网络监听在协助网络管理员监测网络传输数据,排除网络故障等方面具有十分重要的作用.然而,网络监听也给网络的安全带来了极大的隐患,许多的网络入侵往往都伴随着以太网内网络监听行为,从而造成口令失窃,敏感数据被截获等连锁性安全代写论文2网络监听的原理运行网络监听程序的主机要实现网络监听必须满足两个条件:其一,是该主机的网卡必须工作在混杂模式下;其二,是传输的数据包能够到达该主机.根据连接的网络设备不同,以太网分为共享式以太网和交换式以太网.2.1共享式以太网在共享式以太网中,由于是基于广播的方式来发送数据的,所以数包会被发送到连在一起的所有的主机(图1所示).因此,只要运行了网络监听程序的主机的网卡处在混杂模式下就可以实施网络监听了.所以,在共享式以太网中实施网络监听还是很容易的.2.2交换式以太网在交换式以太网中使用交换机,交换机工作在数据链路层,工作时维护着一张MAC地址与交换机端口的映射表.当有数据报发送到交换机上时,交换机会将数据报的目的MAC地址与自己维护的表内的端口对照,然后将数据报发送到相应端口上.所以,即使监听主机的网卡设置成混杂模式,也不能接收到传给其他主机的数据帧.因此,在交换式网络中实施网络监听的关键,就是要使发送给其他主机的数据帧能够到达运行了网络监听程序的主机.在交换式以太网中最常见的方式是利用ARP欺骗的中间人攻击的方式实施网络监听.2.2.1ARP欺骗原理局域网内部的主机根据MAC地址进行通讯.ARP(地址解析)协议是将32位IP到以太网的48位物理地址(MAC地址),以便将报文封装成帧发送.如果源主机的ARP表没有目的IP和目的MAC的映射,则通过广播的方式发送ARP请求.只有具有此目的IP的主机才会对这个广ARP请求作出反应,向源主机发送一个包含其MAC地址的ARP应答报文.ARP协议是一个无状态的协议.一旦收到ARP应答就会对其高速缓存中存放的IP地址到物理地址映射记录进行更新,而不会关心之前是否发出过ARP请求.ARP欺骗的核心就是向目标主机发送一个含伪造的IP-MAC映射信息的ARP应答报文.当目的主机收到此应答报文后就会更新其ARP高速缓存,从而使目标主机将报文发送给错误的对象.2.2.2利用中间人攻击进行监听的原理利用ARP欺骗进行监听其实就是要实现中间人攻击,它是利用ARP欺骗进行攻击的主要方式之一.其原理是使进行监听的主机插入到被监听主机与其它网络主机之间,使进行监听的主机成为被监听主机与其它网络主机通信的中继.在这种情况下,其他网络主机发往被监听主机的信息和被监听主机发往其他网络主机的信息都必须经过进行网络监听的主机.这样,进行网络监听的主机就很容易对被监听主机进行网络监听了.如图2所示,C为进行网络监听的主机,A为被监听主机,B为网络中的任一其他(1)C向A发送ARP应答报文,A修改ARP高速缓冲,使B的IP地址与C的MAC地址相对应,即形成IP~MAC03:03:03:03的映射;2)同理,C向B发送ARP应答报文,使A的IP地址与C的MAC地址相对应,即IP~MAC03:03:03:03;(3)这时,如果A向B发送信息,根据A高速缓冲中的IP-MAC映射,信息实际上是被发送到了C,再由C转发到B;同理,从B发送到A的信息也将会被C转发一次.此时,A与B之间的通信已经被C完全监控.如果运行了网络监听程序的主机C的网卡又工作在混杂模式下,那么,主机C就满足了前面所提到的实现网络监听的两个条件,可以对A与B间的通信进行监听了.3利用ARP欺骗的网络监听实现的程序设计3.1程序总体设计程序的总体设计思想就是:首先要实现中间人攻击,使实施监听主机成为被监听主机之间的中继,然后分析接收到的数据包,根据自行约定的标志确定监听的开始,再根据用户的需要对监听到的数据包作出相应的操作.因此,该程序需要实现的主要功能有两个:(1)根据中间人攻击原理实现ARP欺骗;(2)处理接收到的数据包,根据用户的输入,完成相应的功能.分别建立函数ArpCheatApplication和使用带参数的main函数作为主函数.主函数的功能主要是初始化网卡以及一些全局变量,并使用函数CreateThread来建立新线程,实现对ArpCheatApplication等子函数的调用,完成相应的功能.main的算法如下:intmain(intargc,char**argv)//带参数的main函数{声明部分,定义变量;if(argc!=3)return0;//参数输入错误,返回0//取得参数ServerSideIP<--inet_addr(argv[1]);//第二个命令行参数代表Server端的IPClientSideIP<--inet_addr(argv[2]);//第三个命令行参数代表Client端的IP使用InitAdapter函数初始化网卡;使用自定义函数GetMACAddr函数取得Server端和Client端的MAC地址;//使用CreateThread函数生成实现ARP欺骗的新线程i=1;CreateThread(NULL,0,ArpCheatApplication,&i,0,0);//实现对Server端的ARP欺骗i=2;CreateThread(NULL,0,ArpCheatApplication,&i,0,0);//实现对Client端的ARP欺骗//使用CreateThread函数生成处理接收到的数据包的新线程CreateThread(0,0,AnalysePacketsApplication,NULL,0,0);//使用CreateThread函数生成处理用户输入的新线程CreateThread(0,0,CustomerApplication,NULL,0,0);//其他所需的操作使用PacketFreePacket和PacketCloseAdapter函数释放资源;return0;}上面算法中使用到的GetMACAddr函数是一个自定义的用来根据目标IP获得相应MAC地址的函,其代码如下:BOOLGetMACAddr(DWORDDestIP,char*pMAC){DWORDdwRet;ULONGulLen=6,pulMac[2];dwRet=SendARP(DestIP,0,pulMac,&ulLen);//调用SDK函数来获取目标IP的MAC地址if(dwRet==NO_ERROR)//判断是否找到了目标IP相应的MAC{memcpy(pMAC,pulMac,6);returnTRUE;}elsereturnFALSE;//如果没有找到目标IP相应的MAC,则返回FALSE}.2主要函数分析3.2.1DWORDWINAPIArpCheatApplicatio(LPVOIDlpType)此函数的功能是实施ARP欺骗.由前面对图2中间人攻击的分析可知,函数ArpCheatApplication要实现的功能有两个(如图2,假定A为ServerSide,B为ClientSide):①C告诉ServerSide,ClientSide的MAC是ownmac;②C告诉ClientSide,ServerSide的MAC是ownmac.函数ArpCheatApplication的流程图如图3所示.716四川大学学报(自然科学版)

第42卷图3ArpCheatApplication流程图Fig.3ArpCheatApplicationflowchart3.2.2DWORDWINAPIAnalysePacketsApplication(LPVOIDlp)此函数的功能是处理收到的数据包,通过筛选只分析不属于自己的TCP包,然后根据用户的输入,完成各种功能.其流程如图4所示.图4AnalysePacketsApplication流程图Fig.4AnalysePacketsApplicationflowchart对图4有:(1)对接收到的数据包需要进行以下筛选,其中continue代表跳出当前的数据包筛选,重新读入新数据包进行筛选.//不处理监听主机本身发送和转发的数据包if(memcmp(TCPPacket->ehhdr.SourceMAC,OwnMAC,6)==0)continue;//不处理目的IP为监听主机本身的数据包for(i=0;i<TotalIP;i++)//TotalIP为监听主机所拥有的所有IP数目if(TCPPacket->iphdr.destIP==OwnIP[i])break;//判断目的IP是否为监听主机的某一IP717第4期向昕等:基于ARP欺骗的网络监听原理及实现if(i!=TotalIP)continue;//检查是否IP包,以太网首部中IP包的类型代码为十六进制的0800if(TCPPacket->ehhdr.EthernetType!=htons(0x0800))continue;//检查是否TCP包if(TCPPacket->to!=IPPROTO_TCP)continue;(2)设置开始劫持的标志有多种选择,在这里假设捕获到一个从ClientSide->ServerSide的纯ack后才开始劫持,即检查TCP首部中的6个标志位是否为010000,函数IsACKPacket就是用来判断一个据包是不是只有ACK标志的,代码如下:BOOLIsACKPacket(unsignedcharflag)//flag代表TCP首部的标志位{inti,j=1;for(i=0;i<4;i++){if(flag&j)returnFALSE;//判断标志位低4位是否为1,有为1的,则返回false

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论