假设一个只有 3台电脑组成的局域网, 该局域
网由交换机连接。 其中一个电脑名叫 A, 代表攻击
方; 一台电脑叫S , 代表源主机, 即发送数据的电脑;
另一台电脑名叫 D, 代表目的主机, 即接收数据的电
脑。 这3台电脑 的 I P地址分别为 1 9 2 . 1 6 8 . 0 . 2 ,
1 9 2 . 1 6 8 . 0 . 3 , 1 9 2 . 1 6 8 . 0 . 4 。 MA C地址分别为
MAC A, MAC—
S, MAC—
D。
现在, S电脑要给D电脑发送数据了, 在S电脑内
部, 上层的T C P和U D P的数据包已经传送到了最底层的
网络接口层, 数据包即将要发送出去, 但这时还不知道目
的主机D电脑的M A C地址 MA C _ D 。 这时候, S电脑要
先查询自身的A R P缓存表, 查看里面是否有1 9 2 . 1 6 8 . 0 . 4
这台电脑的MA C地址, 如果有, 那很好办, 就将 M A C _ D
封装在数据包的外面。 直接发送出去即可。 如果没有,
这时S电脑要向全网络发送一个 A R P广播包, 大声询
问: “ 我的I P是 1 9 2 . 1 6 8 . 0 . 3 , 硬件地址是 M A E _ S , 我想
知道 I P地址为 1 9 2 . 1 6 8 . 0 . 4的主机的硬件地址是多
少? ”这时, 全网络的电脑都收到该 A R P广播包了, 包
括A电脑和 D电脑。 A电脑一看其要查询的 I P地址
不是自己的, 就将该数据包丢弃不予理会。 而 D电脑
一
看I P地址是自己的, 则回答S电脑: “ 我的I P地址是
1 9 2 . 1 6 8 . 0 . 4 , 我的硬件地址是 M A E D” 。 需要注意的
是, 这条信息是单独回答的, 即D电脑单独向S电脑发
送的, 并非刚才的广播。 现在 S电脑已经知道目的电
脑 D的M A C地址了, 它可以将要发送的数据包上贴上
目的地址 M A C _ D, 发送出去了。 同时它还会动态更新 自身的A R P缓存表, 将 1 9 2 . 1 6 8 . 0 . 4一 MA C — D这一条
记录添加进去, 这样, 等s电脑下次再给 D电脑发送数
据的时候, 就不用大声询问发送 A R P广播包了。 这就
是正常情况下的数据包发送过程。
这样的机制看上去很完美, 似乎整个局域网也天
下太平, 相安无事。 但是, 上述数据发送机制有一个致
命的缺陷, 即它是建立在对局域网中电脑全部信任的
基础上的, 也就是说它的假设前提是: 无论局域网中那
台电脑, 其发送的A R P数据包都是正确的。 那么这样
就很危险了!因为局域网中并非所有的电脑都安3 + - z g
己, 往往有非法者的存在。 比如在上述数据发送中, 当
S电脑向全网询问“ 我想知道I P地址为1 9 2. 1 6 8. 0 . 4的
主机的硬件地址是多少? ” 后, D电脑也回应了自己的
正确 M A C地址。 但是当此时, 一向沉默寡言的A电脑
也回话了: “ 我的I P地址是 1 9 2. 1 6 8. 0 . 4 , 我的硬件地址
是M A C — A ” , 注意, 此时它竟然冒充自己是 D电脑的I P
地址, 而M A C地址竟然写成自己的!由于 A电脑不停
地发送这样的应答数据包, 本来 s电脑的A R P缓存表
中已经 保存了正确的记录: 1 9 2. 1 6 8. 0 . 4一M A C _ D, 但
是由于A电脑的不停应答, 这时 s电脑并不知道 A电
脑发送的数据包是伪造的, 导致 s电脑又重新动态更
新自身的A R P缓存表, 这 回记录成: 1 9 2. 1 6 8. 0 . 4一
M A C _ A, 很显然, 这是一个错误的记录( 这步也叫A R P
缓存表中毒) , 这样就导致以后凡是 s电脑要发送给 D
电脑, 也就是 I P地址为 1 9 2. 1 6 8. 0 . 4这台主机的数据,
都将会发送给 M A C地址为M A C _ A的主机, 这样, 在光
天化日之下, A电脑竟然劫持了由 s电脑发送给 D电
脑的数据!这就是 A R P欺骗的过程。
如果 A这台电脑再做得“ 过分” 一些, 它不冒充
D电脑, 而是冒充网关, 那后果会怎么样呢?我们大
家都知道, 如果一个局域网中的电脑要连接外网, 都
要经过局域网中的网关转发一下, 所有收发的数据
都要先经过网关, 再由网关发向外网。 在局域网
中, 网关的 I P地址一般为 1 9 2 . 1 6 8 . 0 . 1 。 如果 A这
台电脑向全网不停的发送 A R P欺骗广播, 大声说:
“ 我的 I P地址 是 1 9 2 . 1 6 8 . 0 . 1 , 我的硬件地址是
MAC— A” 这时局域网中的其它电脑并没有察觉到什
么, 因为局域网通信的前提条件是信任任何电脑发
送的A R P广 播包。 这样局域网中的其它电脑都会
更新自身的 A R P缓存表, 记录下 1 9 2 . 1 6 8 . 0 . 1一
MAC— A这样的记录, 这样, 当它们发送给网关, 也就
是 I P地址为 1 9 2 . 1 6 8 . 0 . 1 这台电脑的数据, 结果都
会发送到 M A C — A这台电脑中。
……