我有 NDK 版本 NDK_2_25_00_09、并希望检测网络上的 IP 冲突、以决定停止堆栈以使网络行为标准化并提高每个节点的可访问性
通过检测冲突、我的意思是检测另一台计算机或 Mac 地址在网络上具有相同的 IP、
1.第一种方法
在启动期间、我尝试对本地 IP 执行 Ping 操作、如果 Ping 成功、则继续正常操作、如果失败、则停止 NDK 堆栈、但
-当我的以太网电缆未连接到设备 ping 请求成功,即使我实际上不是在网络所以,在这种情况下,我正在 ping 自己,在这种情况下, 实际上、我注意到该设备没有在网络上转发 ping 请求-即使在我的 PC 上 ping 自己时、我在 Wireshark 上看不到 ICMP 数据包、但当我 ping 另一个 IP 时、我看到了以太网连接上发出的 ICMP 数据包
-也当电缆连接到我的(交换机或路由器)和我的 IP 存在于网络上之前, (冲突情况,我想检测) 该设备未能 ping 通其 IP、因为它没有接收到自己的 ICMP 数据包、所以我收到了 ICMP 请求超时的 ping 失败、有时这种情况得到了验证、如果我启动了该设备、然后启动了冲突的设备、所以根据 连接到以太网总线的第一个节点将被验证、但实际上会根据 ping 失败来决定禁用网络、或者不够、因为许多情况下、其中一个是冲突
2.第二种方法
我使用 arp 表来检查我的本地 IP 是否存在于缓存的 arp 条目中,如果存在,则存在冲突,如果不存在,则不存在冲突,但
-此表被缓存,所以如果节点存在于总线上,但从未在我的本地 ARP 缓存中注册,因为 ARP 表只被填充 ARP 数据包接收,这只在通信期间触发所以
如果器件在堆栈上进行了配置和初始化、但从未向另一个节点发送请求、因此该节点没有此节点的 IP 条目并尝试将自己的 IP 更改为总线上的另一个 IP 节点、该怎么办?
那么、NDK 内部是否有办法检测冲突、或者使用某种方法我可以在没有亲情或违反任何协议规则的情况下检测冲突?