IP 地址冲突检测(解决某种情况下 arp 机制无效的问题)

来源:互联网 发布:install ubuntu 编辑:程序博客网 时间:2024/05/29 04:07

1. 参考代码

先上一个比较好的 arp 参考代码
http://blog.csdn.net/wanxiao009/article/details/5622296#


2. 解决方案

很多博文介绍了 arp 机制检测 IP 地址冲突的原理与实现, 大致实现如下:

  • 使用广播 MAC 地址发送 arp 请求
  • 发送者 IP 地址和 MAC 地址分别填写本机的 IP 地址和 MAC 地址
  • 目标者 IP 地址和 MAC 地址分别填写待检测的 IP 地址和 00:00:00:00:00:00 地址

而检测 IP 地址冲突的情况分为以下两种:

  • 发送者 IP 地址和需要检测的 IP 地址不同(一般出现在 DHCP 请求到 IP 地址后检测局域网中该 IP 地址是否已使用,若没有才使用本次请求的 IP 地址)
  • 发送者 IP 地址和需要检测的 IP 地址相同

很多博文介绍 arp 机制进行 IP 地址冲突的检测基本上只适用第一种情况,因为只有这种情况才能接收到 arp reply.
在第二种情况下,使用大家介绍的方法(在发送 arp 请求时把发送者 IP 地址和目标者 IP 地址都填写本机的 IP 地址),很难接收到 arp reply,或者接收不到响应.

所以面对第二种情况,需按照如下方式来填写 arp 协议字段值:

  • 发送者的 MAC 地址和 IP 地址分别填写本机的 MAC 地址和 0.0.0.0 IP 地址
  • 接收者的 MAC 地址和 IP 地址分别填写 00:00:00:00:00:00 地址和本机 IP 地址(需检测冲突的 IP 地址)

3. WIN7 系统检测 IP 地址冲突的过程

通过抓取 WIN7 系统检测 IP 地址冲突时进行的 arp 请求得知,也是按照上述方式进行的.

抓取准备工作:手机和电脑处于同一局域网,首先把手机设置为静态 IP(如: 192.168.1.200),然后把电脑也设置成同样的静态 IP,在点击确认的那一刻,可以看到抓包软件抓到的 arp request 和 arp reply,同时电脑上也会提示 IP 地址冲突.

电脑发送的 arp 请求
电脑发送的 arp 请求

接收到的 arp reply
这里写图片描述


4. 遇到的问题

  1. 当设备上存在有线网卡和无线网卡,并都连接同一局域网时,尽管两个网卡的 IP 地址不相同,但是当有线网卡检测 IP 地址冲突时,无线网卡也会发送 arp reply。
    解决方法:可以断开无线网卡的连接,再进行有线网卡 IP 地址冲突的检测。

5. 结语

希望以上介绍,能够帮助到大家,在需要实现检测 IP 地址冲突的功能时,不至于像博主一样耗费了那么多时间.

原创粉丝点击