Networking 检测具有相同MAC地址的其他主机

Networking 检测具有相同MAC地址的其他主机,networking,ethernet,Networking,Ethernet,如何检测另一台主机是否使用与当前主机相同的MAC地址,例如,因为另一台主机正在欺骗 我在一个嵌入式环境中工作,所以在协议级别上寻找答案,而不是“使用这样或那样的工具” 编辑:RARP无法解决此问题。要让RARP获得任何回复,该网段上必须至少有一台主机支持RARP。由于RARP已经过时,现代操作系统不支持它。此外,RARP所能做的就是告诉您自己的IP地址——如果网段上有另一台主机使用相同的MAC,响应不会有任何不同,除非该主机本身使用了不同的IP地址。在单个网段上使用相同MAC地址的两台主机可能会

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

我在一个嵌入式环境中工作,所以在协议级别上寻找答案,而不是“使用这样或那样的工具”


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

在单个网段上使用相同MAC地址的两台主机可能会使交换机崩溃,并且您可能会通过极不可靠的网络连接来检测它(因为交换机会将属于您主机的部分数据包发送给第二个,具体取决于您中的哪一个向其方向发送了最后一个数据包).

这个问题太有意思了,无法放下!在几次错误的开始之后,我开始思考问题的基本组成部分,并搜索RFC寻求建议。我还没有找到明确的答案,但以下是我的思考过程,希望能有所帮助:

  • 最初的问题是如何检测具有MAC地址的另一个设备。假设您在IP网络上,需要什么来完成此任务

  • 被动方法只是监听通信量,查找没有传输但有MAC地址的任何数据包。这可能发生,也可能不会发生,因此,尽管它可以确定是否存在重复数据包,但它无法确定是否存在重复数据包

  • 任何活动方法都需要发送一个数据包,迫使冒名顶替者做出响应。这将立即消除任何依赖于可选协议的方法

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

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

  • 因此,答案似乎是传输一个广播(以太网)数据包或一个以你的MAC地址为目的地的数据包,这需要一个响应。Monkey扳手是,通常涉及一个IP地址,而你不知道它

什么样的协议符合这种描述

简单回答:

  • 如果您的网络支持BOOTP或DHCP,那么就完成了,因为这会将MAC地址授权绑定到IP地址。发送BOOTP请求,获取IP地址,然后尝试与之通信。您可能需要创造性地将数据包强制连接到线路上,并阻止自己响应(我认为明智地使用iptables和NAT)
不太容易回答:

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

  • 发送通常会从您那里生成响应的任何数据包,阻止您自己响应,并从另一台设备上查找响应。使用您的IP地址作为目标似乎是明智的,但我不相信这一点。不幸的是,详细信息(以及答案)是错误的作为OP的练习…但我希望讨论会有所帮助

我怀疑最终的解决方案将涉及多种技术的结合,因为似乎没有任何单一的方法能够保证可靠的决定

有关资料,请浏览

如果所有这些都失败了,您可以享受:


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

您可以为子网中每个可能的ip发送一个ARP请求。 当然,ARP请求的源地址必须是ff:ff:ff:ff:ff:ff,否则您可能看不到响应

我用bittwiste伪造了这样一个数据包,并用PReplay重播了它,网络上的所有主机都得到了响应。(我不知道这些伪造的ARP数据包是否合法……一些操作系统可能会忽略它们)

以下是伪造包裹的外观:

以下是回复的内容:

如果您观察响应并在其中一个数据包(红色矩形中)中看到您的MAC地址,则会发现有人的MAC地址与您相同


不幸的是,我无法完全测试这一理论,因为我的(Windows)机器都不关心我试图设置nic的MAC地址…

这已经很晚了,而且没有答案,但我想跟进我所做的,以防其他人感兴趣

我在使用一些非常奇怪的嵌入式硬件,这些硬件在制造时没有分配MAC地址。这意味着我们需要在软件中分配一个

显而易见的解决方案是让用户选择一个他们知道在他们的网络上可用的MAC地址,最好是从本地管理的范围,这就是我所做的。然而,我想选择一个合理安全的默认值,并尝试在发生冲突时警告用户

最后,我在本地管理的范围内选择了一个随机的ish默认值,通过读取一些具有中等熵的硬件读数来选择。我故意排除了范围的开始和结束,因为假设这些值更可能是手动选择的。很可能只有其中一个在任何给定的网络上都可以使用e设备,而且肯定少于20个,因此冲突的可能性非常低,尽管由于某种程度上可预测的随机数,冲突的可能性并没有那么低

考虑到出现问题的可能性很低,并且轻视