如何检测其他主机是否使用与当前主机相同的MAC地址,例如因为其他主机是欺骗?
我在嵌入式环境中工作,所以在协议级别寻找答案,而不是"使用这样的工具".
编辑:RARP并没有解决这个问题.对于RARP完全得到任何回复,该段上必须至少有一个主机支持RARP.由于RARP已经过时,现代操作系统不支持它.此外,所有RARP都可以告诉您自己的IP地址 - 如果该段上具有相同MAC的其他主机,则响应将不会有任何不同,除非该主机本身使用不同的IP地址.
这个问题太有趣了,无法放下!经过几次错误的开始后,我开始考虑问题的基本组成部分,并搜索RFC以寻求建议. 我还没有找到明确的答案,但这是我的思考过程,希望它有所帮助:
原始问题询问如何使用您的MAC地址检测另一台设备.假设您在IP网络上,完成此任务需要什么?
在被动的方法是简单地听交通,并寻找你没有发送但有你的MAC地址的任何数据包.这可能会也可能不会发生,所以尽管它可以明确地告诉你是否存在重复,但它无法明确告诉你它没有.
任何活动方法都要求您传输强制冒名顶替者响应的数据包.这会立即消除任何依赖于可选协议的方法.
如果另一台设备欺骗您,它必须(根据定义)响应以您的 MAC地址为目的地的数据包.否则它是窥探而不是欺骗.
解决方案应独立于IP地址,并且仅涉及MAC地址.
因此,答案似乎是传输广播(以太网)数据包或以MAC地址为目的地的数据包,这需要响应.Monkeywrench是通常涉及IP地址,你不知道它.
什么样的协议适合这种描述?
简单回答:
如果您的网络支持BOOTP或DHCP,那么您就完成了,因为这会将MAC地址权威地绑定到IP地址.发送BOOTP请求,获取IP地址,并尝试与之通信.您可能需要具有创造力来强制数据包进入线路并阻止自己响应(我正在考虑明智地使用iptables和NAT).
不那么简单的答案:
一种独立于IP的协议:不使用IP层的协议,或允许广播的协议.没有人想到.
发送通常会从您生成响应的任何数据包,阻止您自己响应,并寻找其他设备的响应.使用您的IP地址作为目的地似乎是明智的,但我不相信.不幸的是,细节(以及答案)留给了OP的练习......但我希望讨论有所帮助.
我怀疑最终解决方案将涉及多种技术,因为没有一种方法可以保证可靠的决定.
有些信息可在http://en.wikipedia.org/wiki/ARP_spoofing#Defenses获得
如果一切都失败了,您可能会喜欢这个:http://www.rfc-editor.org/rfc/rfc2321.txt
请发布您的解决方案的后续跟进,因为我相信它会对其他人有所帮助.祝好运!