由于一个不幸的(错误)配置问题,我有大约100个主机,其中IPv6 6/IPv6 4(甚至是IPv6链接本地的)地址都是相同的,目前我无法更改。然而,所有主机都有唯一和已知的MAC地址,并且处于相同的广播域中。通过自己制作相应的以太网帧(使用已知的MAC地址而不是通过ARP/.获得的MAC ),可以在IP级别上单独和同时与主机通信吗?所有(嵌入式)主机都运行Linux网络堆栈。
是否存在curl这样的现有程序的包装器,允许我与每个主机维护一个单独的TCP连接,允许我在上述情况下通过HTTP同时与它们对话?在我看来,从理论上讲,这是可能的。
发布于 2021-12-16 22:40:38
正如@AlexD所指出的,您必须在本地计算机中手动将通用IP地址a.b.c.d与每个特定远程主机的所需MAC地址xx-xx相关联,以便您能够连接到它。
在Windows中,可以在提升的命令外壳窗口中使用arp
命令:
arp -s a.b.c.d xx-xx-xx-xx-xx-xx
在使用arp -d a.b.c.d
删除之前,此关联是永久的(如arp -?
所示)。
Linux中的命令和选项-s/-d
是相同的,它们在具有根权限的shell中执行,或者以sudo
作为前缀,但只影响驻留的ARP缓存,因此在重启时会被遗忘(建议使用man arp
)。
编辑:正如@MAC 67所述,本地网络中的每个主机只能有一对IP/MAC。这是因为本地流量仅使用给定IP地址的最后已知MAC地址(通过ARP查询或ARP表查找找到)。如果有其他具有相同IP的机器,它们将不会被识别。
只有在下列情况下,这种情况才会改变:
手动配对比自动配对具有更高的优先级。
它归结为:我们只能有一对IP/MAC对目的主机进行成功的通信。如果本地网络中有几对,由于配置错误或恶意软件/黑客活动,而我们正在使用ARP自动发现,则会出现间歇性问题或更糟的问题。
当然,具有唯一IP地址的动态方法是首选的;这意味着管理的麻烦较少.;)
发布于 2021-12-16 21:39:30
您可以使用arptables
在管理机器上禁用传入的ARP更新,然后对每个已瘫痪的主机逐一手动使用arp
更新ARP表。
发布于 2021-12-18 09:24:07
如果您构建了自己的IP堆栈,那么您所要求的只是假设性的。
如果使用IP地址,则IP堆栈使用动态或静态ARP来确定每个IP所需的MAC地址。在任何给定的时间都只能有一个映射。应用程序无法为任何套接字连接指定或强制特定的映射。详情见@Fjor的答复。
如果您使用允许每个套接字的IP到MAC映射的API创建自己的IP堆栈,那么您可以按照您的要求进行操作。
https://serverfault.com/questions/1087532
复制相似问题