我正在创建一个需要跟踪本地网络上的从属机器的应用程序。
我偶然看到了这个帖子:设置解析本地 IP 但是,如果分配给各个主机的本地 IP 发生变化,应用程序需要更新其发送请求的 IP。我目前正在考虑在应用程序的数据库中创建一个存储 MAC 地址的路由表?那么,如果 IP 发生变化,应用程序会询问同一子网中的所有其他 IP 的 MAC 地址是什么,然后更改路由表?这是正确的方法吗?
答案1
你正在重塑地址解析协议 但是,这并不能保证您不会始终拥有最新的 ARP 表。您可以随时查询 DHCP,假设这就是您的意思
如果分配给各个主机的本地 IP 发生变化
最后,我建议使用可以解析 IP 的普通主机名,因为 DNS 服务器很可能是最新的
答案2
这确实是一种方法。
另一种方法是让每个从属设备使用某种类型的 ID 向主机注册,例如其主机名:“这是我的名字,这是我的 IP”。因此,如果它发生变化,它会通知主机。
我相信这确实是 Stackoverflow 的一个问题。
答案3
如果我理解正确的话,您可以使用 mac 地址作为唯一标识符来跟踪客户端。
如上所述,arp 表(arp -a 的输出)将告诉您在过去 X 分钟内与您通信的所有 PC 的最后一个已知 ip 地址 mac 地址组合(X 因操作系统而异)。
只需执行 ping “广播地址”即可刷新 arp 表。这样应该可以为您提供子网上的大多数活动设备。(它不是 100% 万无一失的。您可能会错过几个设备,因为它们很忙,或者您自己的网络堆栈因响应量过大而无法承受,并丢失一些设备。)
另一个选项是从 DHCP 服务器获取 DHCP 租约列表(如果您有权访问)。在 Windows 环境中,netsh 命令对于此类操作非常有用。
答案4
会询问同一子网中的所有其他 IP 的 MAC 地址
否 - 您只能看到本地子网的 MAC 地址。您只能看到其他子网的路由器 MAC 地址(通过 TCP/IP)。
并改变路由表?
!!!! 即使你知道远程机器的 MAC 地址,那也有与路由表无关
您对所要实现的目标的描述完全令人困惑。
需要跟踪本地网络上的从属机器
好的,我们就从那开始吧。
TCP/IP 和 OSI 网络模型中没有“从属”。只有服务器和客户端。服务器知道客户端是谁,因为它有一个固定地址(通常是 IP 名称)。即使不是这种情况,客户端也可以通过探测开放端口来发现服务器。
另一种方法是对等模型 - 其中有多个服务器。服务器可能有层次结构,在这种情况下,每个服务器将维护其他节点(部分?)的目录及其在层次结构中的位置。如果层次结构中某个特定级别内的节点不足,则检测到这种情况的节点应向下一级的节点请求选举。
一种强力方法是让潜在客户向服务器发送广播请求。
如果您正在谈论对端点进行身份验证 - 那么这是一个完全独立的问题(除非所有相关节点都在同一个 VPN 内)。