ARP协议,ARP攻击的原理,网络执法官的具体实现

ARP协议解析:

ARP协议的格式:


typedef struct _ARP_HDR
{
 USHORT HdType;
 USHORT ProtType;
 BYTE HdSize;
 BYTE ProtSize;
 USHORT Opcode;
 BYTE SenderMacAddr[ 6 ];
 ULONG SenderIPAddr;
 BYTE DstMacAddr[ 6 ];
 ULONG DstIPAddr;
} ARP_HDR, *PARP_HDR;

其中:


HdType 表示数据链路层的类型。(一般会是以太网协议)
ProtType 表示网络层的类型,(一般会是IP协议)
HdSize 表示数据链路层地址的长度。(以太网为6)
ProtSize:表示网络层地址的长度。(IP协议为4)

Opcode:表示ARP包的类型,有请求(0x0001)和响应(0x0002)两种,还有gratuitous标志,在多次请求没有响应时会置位。

SenderMacAddr:表示发送者的数据链路层地址。
SenderIPAddr:表示发送者的网络层地址。
DstMacAddr:表示接收者的数据链路层地址。
DstIPAddr:表示接收者的网络层地址。

什么时候会传输ARP包:


网络中的任何一台计算机只会接收(正常模式下)和识别数据链路层地址与自己相同的数据包,所以任何一台计算机发送数据包时,
都必须要知道下一个接收计算机的数据链路层地址,但在计算机刚刚接入网络时,它只知道对端接收计算机的网络层地址,这时就需要调出ARP协议来大显身手了,它会以以上格式来回答正确的数据链路层地址是什么。

ARP攻击的原理:(只讨论以太网情况)


知道了ARP协议的工作方式,那么我们可以想到:

如果不断的发送错误MAC地址的ARP响应包,网络就会乱做一团,没有任何两台计算机之间可以进行正常的通信。


如果针对某一计算机发出的ARP请求,响应错误MAC地址的ARP包,甚至反过来,对所有其它计算机对此计算机IP的ARP请求也这样做,
那么,这台计算机将无法和任何一台网络中的其它计算机通信。

这就是ARP攻击的原理,那么有一个比较流行的,搞的一些用局域网的朋友匪夷所思的上不了网的软件:网络执法官(Netrobocop)

,它是如何实现这种功能的呢?

为了侦听到以太网中的所有的数据包,也就是包括了其它计算机的数据包,网卡需要工作在混杂模式下,同时,必须做为一个网络内

核模块才能进行数据链路层级数据包的读取和写入。

如何来完成?现在,有一种很流行WINPCAP库就可以完成此功能,实际上,网络执法官也正是这么做的。那么,它的工作流程就是这样的:

1.加载NPF内核模块(WINPCAP的内核部分),使网卡工作在混杂模式下。
2.抓取网络上所有的数据包,对其进行以下分析:
  1.是否是ARP数据包,不是,则通过。
  2.是否是受限计算机(通过IP地址识别)的请求ARP包,或其中计算机对此受限计算机的请求ARP包,不是,则通过。
  3.写入由随机生成的MAC地址来拼接成的新的ARP响应包,使用NPF内核模块来发送至网络。如下图所示:

 
  4.这时,受限计算机会接收到多个响应,保留最后接收到的那个MAC地址,而它只是一个随机数罢了,所以之后的所有通信将都不
再有效。

这个就是ARP攻击原理和流行的实现方式,通常,我们可以通过固定ARP缓存中MAC地址来抵御ARP攻击,但如果一开始的MAC就是错的,此方法将无法生效。

我本人针对网络执官等这种ARP攻击程序,实现了一份软件来完成对它们攻击的抵抗,非常有效。大家可以在我的资源之中下载:
名称为:ArpShield(Easy anti-arp attack from Netrobocop) ,

或在这个链接下载:

http://www.rayfile.com/zh-cn/files/3fa91d40-3983-11e0-936b-0015c55db73d/

这是它的运行界面:

这是我实现的一套系统安全工具之中的一个,我还将继续开发下去,希望得到支持,或进行合作,可以考虑开放源码,msn:[email protected]

欢迎大家批评指正。

猜你喜欢

转载自blog.csdn.net/CharlesPrince/article/details/6175467
今日推荐