2024年3月12日发(作者:)

ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。在局域网中,

网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机

要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地

址是如何获得的呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送

帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备

的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。

每台安装有TCP/IP协议的电脑里都有一个ARP缓存表,表里的IP地址与MAC地址

是一一对应的,如下所示。

主机 IP地址 MAC地址

A 192.168.16.1 aa-aa-aa-aa-aa-aa

B 192.168.16.2 bb-bb-bb-bb-bb-bb

C 192.168.16.3 cc-cc-cc-cc-cc-cc

D 192.168.16.4 dd-dd-dd-dd-dd-dd

我们以主机A(192.168.16.1)向主机B(192.168.16.2)发送数据为例。当发送数

据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。如果找到了,也就知道

了目标MAC地址,直接把目标MAC地址写入帧里面发送就可以了;如果在ARP缓存表

中没有找到相对应的IP地址,主机A就会在网络上发送一个广播,目标MAC地址是

“”,这表示向同一网段内的所有主机发出这样的询问:“192.168.16.2的

MAC地址是什么?”网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,

才向主机A做出这样的回应:“192.168.16.2的MAC地址是bb-bb-bb-bb-bb-bb”。这

样,主机A就知道了主机B的MAC地址,它就可以向主机B发送信息了。同时它还更新

了自己的ARP缓存表,下次再向主机B发送信息时,直接从ARP缓存表里查找就可以了。

ARP缓存表采用了老化机制,在一段时间内如果表中的某一行没有使用,就会被删除,这

样可以大大减少ARP缓存表的长度,加快查询速度。

从上面可以看出,ARP协议的基础就是信任局域网内所有的人,那么就很容易实现在

以太网上的ARP欺骗。对目标A进行欺骗,A去Ping主机C却发送到了

DD-DD-DD-DD-DD-DD这个地址上。如果进行欺骗的时候,把C的MAC地址骗为

DD-DD-DD-DD-DD-DD,于是A发送到C上的数据包都变成发送给D的了。这不正好

是D能够接收到A发送的数据包了么,嗅探成功。

A对这个变化一点都没有意识到,但是接下来的事情就让A产生了怀疑。因为A和C

连接不上了。D对接收到A发送给C的数据包可没有转交给C。

做“man in the middle”,进行ARP重定向。打开D的IP转发功能,A发送过来的

数据包,转发给C,好比一个路由器一样。不过,假如D发送ICMP重定向的话就中断了

整个计划。

D直接进行整个包的修改转发,捕获到A发送给C的数据包,全部进行修改后再转发

给C,而C接收到的数据包完全认为是从A发送来的。不过,C发送的数据包又直接传递

给A,倘若再次进行对C的ARP欺骗。现在D就完全成为A与C的中间桥梁了,对于A

和C之间的通讯就可以了如指掌了。

【在局域网内查找病毒主机】

在上面我们已经知道了使用ARP欺骗木马的主机的MAC地址,那么我们就可以使用

NBTSCAN工具来快速查找它。

NBTSCAN可以取到PC的真实IP地址和MAC地址,如果有”ARP攻击”在做怪,

可以找到装有ARP攻击的PC的IP/和MAC地址。

命令:“nbtscan -r 192.168.16.0/24”(搜索整个192.168.16.0/24网段, 即

192.168.16.1-192.168.16.254);或“nbtscan 192.168.16.25-137”搜索

192.168.16.25-137 网段,即192.168.16.25-192.168.16.137。输出结果第一列是IP地

址,最后一列是MAC地址。

NBTSCAN的使用范例:

假设查找一台MAC地址为“000d870d585f”的病毒主机。

1)将压缩包中的 和解压缩放到c:下。

2)在Windows开始—运行—打开,输入cmd(windows98输入“command”),

在出现的DOS窗口中输入:C: btscan -r 192.168.16.1/24(这里需要根据用户实际网段

输入),回车。

3)通过查询IP--MAC对应表,查出“000d870d585f”的病毒主机的IP地址为

“192.168.16.223”。

2)编写一个批处理文件内容如下:

@echo off

arp -d

arp -s 192.168.16.254 00-22-aa-00-22-aa