资源描述:
《基于ether的网络监听以及arp欺骗》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、基于ETHER的网络监听以及ARP欺骗1 引 言X络监听,亦称为X络嗅探,是利用计算机的X络接口监视并查看X络中传输的数据包的一种技术。它工作在X络的底层,能够把X络中传输的全部数据记录下来。监听器(sniffer)不仅可以帮助X络管理员查找X络漏洞和检测X络性能,还可以分析X络的流量,以便找出X络中存在的潜在问题。不同传输介质的X络,其可监听性是不同的。但一般说来,以太X、FDDIToken、微波和无线X络都有很高的可能性被监听。实际应用中的sniffer分软、硬两种。软件监听器便宜,易于使用,缺点是往往无法抓取X络上所有的传输数据(比如碎片),也就
2、可能无法全面了解X络的故障和运行情况;硬件监听器通常称为协议分析仪,它的优点恰恰是软件监听器所欠缺的,但是价格昂贵。目前主要使用的是软件监听器代写论文。2 X络监听的原理在以太X中,所有的通讯都是“广播”式的,也就是说通常同一个X段的所有X络接口都可以访问在信道上传输的所有数据。在一个实际系统中,数据的收发是由X卡来完成,每个X卡都有一个唯一的MAC地址。X卡接收到传输来的数据以后,X卡内的单片程序检查数据帧的目的MAC地址,根据计算机上的X卡驱动程序设置的接收模式来判断该不该接收该帧。若认为应该接收,则接收后产生中断信号通知CPU,若认为不该接收则丢
3、弃不管。正常情况下,X卡应该只是接收发往自身的数据包,或者广播和组播报文,对不属于自己的报文则不予响应。可如果X卡处于混杂模式,那么它就能接收一切流经它的数据,而不管该数据帧的目的地址是否是该X卡。因此,只要将X卡设置成混杂模式(promiscuous),那么它就可以捕获X络上所有的报文和帧,这样也就达到了X络监听的目的。由此可见,X络监听必须要满足两个条件:①X络上的通讯是广播型的。②X卡应设置为混杂模式。这在传统的以太X中是满足的。因为传统的以太X是共享型的,所有的主机都连接到HUB,而HUB对数据包的传输形式是广播。这意味着发给某个主机的数据包也
4、会被其它所有主机的X卡所收到。因此在这样的环境中,任何设置成混杂模式的主机,都可以捕获发送给其它主机的数据包,从而窃听X络上的所有通信。可如今,随着交换机的广泛使用,更多的以太X是属于交换型的。所有的主机都连接到SAC水包(MACFlooding)。其中MACFlooding就是指向交换机发送大量含有虚假MAC地址和IP地址的IP包,从而使得交换机内部的地址表“溢出”,进入所谓的“打开失效”模式,迫使SAC地址来进行寻址的。发送方必须知道目的主机的MAC地址才能向其发送数据。ARP协议的作用就在于把逻辑地址转换成物理地址,也即是把32bit的IP地址变
5、换成48bit的以太X地址。为避免频繁发送ARP包进行寻址,每台主机都有一个ARP高速缓存,其中记录了最近一段时间内其它IP地址与其MAC地址的对应关系。如果本机想与某台主机通信,则首先在ARP缓存中查找这台主机的IP和MAC信息,若存在,则直接利用此MAC地址构造以太包;若不存在,则向X络上广播一个ARP请求包。目的主机收到此请求包后,发送一个ARP应答包。本机收到此应答包后,把相关信息记录在ARP高速缓存中,然后再进行发送。由此可见,ARP协议是有缺陷的。一台恶意的主机可以构造一个ARP欺骗包,而源主机却无法分辨真假。3.2 相关协议的帧格式为了论
6、述的简洁性,文中我们对以太X中ARP帧格式做如3.3 ARPSpoof原理实验环境如下图所示:在这个交换X络中有四台PC,其中HostD试图进行ARP欺骗来监听HostA的数据流。假设主机A要与主机B通信,但A在其ARP缓存中没有找到有关主机B的MAC信息。于是,主机A发出ARP请求包:正常情况下,主机B回应一个ARP应答包:但同时,主机D也监听到了ARP请求包,随后它也发出了一个伪造的ARP应答包:这样,主机A就收到了两个ARP应答包,一个来自主机B,一个来自主机D。当A收到主机B的ARP应答包后的一段时间,其ARP表确实会正确记录着B的IP-to-
7、MACmapping表项。但随后,它收到了D的ARP包,并且它也仍然认为这是正确的。于是,它修改自己缓存中的ARP表。此后,若A向B发送数据,则数据实际上是流向D。同理,主机D也可以对主机B进行欺骗,使流向A的数据流向D,并且启用自己的数据转发功能,充当man-in-middle,这样,主机D就达到了监听主机A通讯的目的。3.4 程序处理流程下面给出了程序的处理流程。(1)获取目的主机A的IP,并将它和本机IP、本机MAC地址分别保存到dst_ip,oac中。(2)向主机A发出正常的ARP请求包,以得到dst_mac。(3)初始化数据链路,将NIC置为
8、promiscuous模式。(4)进入主循环,开始监听数据包,置flag=0。(5)取出一个包