networking - 检测具有相同 MAC 地址的另一台主机

标签 networking ethernet

如何检测另一台主机是否使用与当前主机相同的 MAC 地址,例如因为其他主机正在欺骗?

我在嵌入式环境中工作,因此在协议(protocol)级别寻找答案,而不是“使用这样那样的工具”。

编辑:RARP不能解决这个问题。为了使 RARP 得到任何回复,网段上必须至少有一台主机支持 RARP。由于 RARP 已过时,现代操作系统不支持它。此外,RARP 所能做的就是告诉您自己的 IP 地址 - 如果网段上有另一台具有相同 MAC 的主机,响应不会有任何不同,除非该主机本身使用了不同的 IP 地址。

最佳答案

这个问题太有趣了,让人爱不释手!经过几次错误的开始后,我开始思考问题的基本组成部分,并在 RFC 中寻求建议。 我还没有找到明确的答案,但这是我的思考过程,希望它有所帮助:

  • 最初的问题询问如何使用您的 MAC 地址检测另一台设备。假设您位于 IP 网络上,需要什么才能完成此任务?

  • 被动方法只是监听流量并查找您未传输但具有您的 MAC 地址的任何数据包。这种情况可能会发生,也可能不会发生,因此虽然它可以明确地告诉您是否存在重复项,但它不能明确地告诉您不存在。

    <
  • 任何主动方法都要求您传输强制冒名顶替者响应的数据包。这会立即消除任何依赖于可选协议(protocol)的方法。

  • 如果另一台设备正在欺骗您,它必须(根据定义)响应以您的 MAC 地址作为目标的数据包。否则,它是窥探,但不是欺骗

  • 该解决方案应该独立于 IP 地址,并且仅涉及 MAC 地址。

  • 因此,答案似乎是传输广播(以太网)数据包或以您的 MAC 地址作为目的地的数据包,这需要响应。问题在于,通常会涉及到 IP 地址,而您却不知道。

哪种协议(protocol)符合此描述?

简单回答:

  • 如果您的网络支持 BOOTP 或 DHCP,那么您就完成了,因为这会权威地将 MAC 地址绑定(bind)到 IP 地址。发送 BOOTP 请求,获取 IP 地址,并尝试与其通信。您可能需要发挥创意,将数据包强制发送至网络并阻止自己响应(我认为明智地使用 iptables 和 NAT)。

不太容易的答案:

  • 一种独立于 IP 的协议(protocol):要么不使用 IP 层,要么允许广播。没有想到。

  • 发送通常会生成您的响应的任何数据包,阻止您自己响应,并查找其他设备的响应。使用您的 IP 地址作为目的地似乎是明智的,但我对此并不确信。不幸的是,细节(以及答案)被留给OP作为练习......但我希望讨论有所帮助。

我怀疑最终的解决方案将涉及多种技术的组合,因为似乎没有一种方法可以保证可靠的确定。

一些信息可在 http://en.wikipedia.org/wiki/ARP_spoofing#Defenses 获取。

如果一切都失败了,你可能会喜欢这个:http://www.rfc-editor.org/rfc/rfc2321.txt

发布您的解决方案的后续内容,因为我相信这会对其他人有所帮助。祝你好运!

关于networking - 检测具有相同 MAC 地址的另一台主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/276990/

相关文章:

security - IP 地址过滤的安全性如何?

linux - unregister_netdevice : waiting for eth1 to become free?

c - STM32F3如何使用MODBUS TCP?

networking - 了解对数据包的 vlan 处理

windows - 只需知道MAC地址即可获取IP

c - 理解 htonl() 和 ntohl()

java - 如何在 Java 中表示位字段(并发送它们)

android - 设备以太网连接状态

linux - 如何使用connman设置以太网接口(interface)MAC地址

java - 获取android以太网MAC地址(不是wifi接口(interface))