检测同一个局域网

网络工程 路由 无线的 纳特 IEEE-802.11
2021-07-12 03:47:39

是否有可能从与两个客户端 {A, B} 通信的中央服务器确定 A 和 B 在物理上是否位于同一本地网络上?

1) 本地/家庭网络

我会说肯定的。用户的 NAT/路由器将指示 A 和 B 的相同 IP 地址。

2) 具有多个网关的更大网络

我担心的是更大的无线网络(例如机场)。如果我有 A 和 B 的两个 IP 通过不同的路由器连接到无线网络,我可以根据 A 和 B 的 IP 地址对机场的网络做出任何假设吗?我可能可以通过反向 IP 查找获得一些顶级信息,但这对于非常大的网络(如大学无线网络)来说可能不够好。这里的答案可能是“不……”

最后,如果 A 和 B 可以向中央服务器提供信息怎么办?这就是我的网络知识变得模糊的地方。如果 A 和 B 具有相同的网关和“足够相似”的公共 IP,我应该能够假设它们在同一个局域网上,对吗?这个假设有什么缺陷?

4个回答

为已经提供的答案添加不同的视角。

当应用程序想要在同一网络上的客户端之间进行传输而不通过某种远程服务器进行代理时,该应用程序通常会使用广播来允许客户端在同一网络上“相互检测”。

事实上,这就是 Windows NFS 的工作方式。Windows 机器通过本地网络相互广播,以确定工作组中还有哪些其他机器,或者哪些资源可用于共享。

Dropbox 做同样的事情。如果我的手机和笔记本电脑连接到同一个 Dropbox 帐户并连接到同一个 WiFi。我在手机上共享的内容通过本地 LAN 通信同步到我的 PC。(我的手机仍会上传到 Internet 上的 DropBox,但它可以让我的 PC 不必从 Internet 下载新文件,因为它在本地以更高的速度可用)


把它与你的问题联系起来。远程服务器无法了解两个客户端是否在同一网络上。但是,绝对有一种方法可以让两个客户端自己发现它们是否在同一网络上,然后将他们的“发现彼此”报告回远程服务器。

正如 Ron 所说,如果两个客户端共享一个 IP 地址,远程服务器就不能假设它们在同一个 LAN 上。两个客户端也不应该仅仅因为它们共享相同的网关(甚至网关 MAC 地址,HSRP mac 地址冲突并不像您想象的那么罕见就假设它们在同一个 LAN 上,或者每个客户端在同一个 IP 网络中都有一个地址。他们检测它们是否在同一网络上的可靠方法是通过某种发现机制。

简短的回答是无法知道远程主机的本地 IP 地址(私有 IP)。除非您在连接到远程站点的 L3 设备上显示 ARP 地址表或任何类型的管理显示

远程服务器真的没有办法知道两个客户端是否在同一个本地网络上。即使使用相同的公共地址,您也无法知道它们彼此不在全国范围内,因为它们可能属于具有多个站点的公司,这些站点使用中央代理或使用 NAT 的防火墙。

有一些技巧可以让您知道通过代理/NAT 连接到服务器的客户端的本地 IP 地址。

其中之一是让客户端运行一个 Java 小程序来检查本地 IP 并将其发送到服务器。

当有 WebRTC 请求时,一些 VPN 客户端会发出本地 IP 地址,而一些浏览器也会让服务器知道它。(这不是一个功能,它是一个错误,所以可能很快就会被纠正)。