Networking 根据ipaddress唯一地识别路由器后面的机器

Networking 根据ipaddress唯一地识别路由器后面的机器,networking,ip-address,router,subnet,Networking,Ip Address,Router,Subnet,首先是一些背景知识。我在局域网中的每台机器上都安装了.net客户端代理。他们也在同一局域网上与我的中央服务器[网站]进行交互 对于我的网站来说,弄清楚哪些机器可以相互对话是很重要的。例如,如果不配置路由器等,一个子网的机器无法直接与另一个子网的机器通信。但是同一子网中的机器应该能够直接相互通信 我面临的问题是lan设置如图1所示 因为Comp1、Comp2和Comp3位于路由器后面,所以它们的IP地址是192.168.1.2到192.168.1.4。这些计算机上的我的客户端代理将相同的IP地

首先是一些背景知识。我在局域网中的每台机器上都安装了.net客户端代理。他们也在同一局域网上与我的中央服务器[网站]进行交互

对于我的网站来说,弄清楚哪些机器可以相互对话是很重要的。例如,如果不配置路由器等,一个子网的机器无法直接与另一个子网的机器通信。但是同一子网中的机器应该能够直接相互通信

我面临的问题是lan设置如图1所示

因为Comp1、Comp2和Comp3位于路由器后面,所以它们的IP地址是192.168.1.2到192.168.1.4。这些计算机上的我的客户端代理将相同的IP地址报告回服务器。但是,计算机Comp4、Comp5也具有相同的IP地址

因此,就我的服务器而言,有两台计算机具有相同的IP地址。不仅如此,因为所有机器的子网掩码都是255.255.255.0,我的服务器被愚弄到认为Comp1可以直接与Comp5通信,这是不可能的。


那么,我该如何解决这个问题呢?我需要在我的客户机或服务器中更改什么,以便支持此方案。这两件事是我唯一能控制的

一种方法是让各个客户机使用广播消息来确定他们可以看到谁。让每个客户机监听某个特定的UDP端口,并且每个客户机向本地广播域广播其存在。当客户端可以通过这种方式相互查看时,它们可能还可以相互建立TCP连接

如果服务器需要知道哪些客户端可以相互通信,只需让客户端告诉服务器即可

编辑:似乎网络图 过于简化,可能会有 多路由器/子网级别。我的 原来的答案不能处理这个问题 脚本还有,有限制, 仅修改客户端应用程序或服务器 应用程序,而不是篡改 路由器和防火墙使得 这更难

EDIT2:使用“arp-a”可以提取 路由器的MAC地址。如果 客户端应用程序可以做到这一点 难题已经解决了

客户端应用程序知道本地计算机地址并将其传递给服务器应用程序

当连接进入时,服务器应用程序知道远程地址。这将是机器地址或路由器地址

根据这两个值,你可以算出你的要求

例如:

Server app receives connection from 10.10.10.2 with client supplying 192.168.1.2

Server app receives connection from 10.10.10.3 with client supplying 192.168.1.3
“远程地址”区分子网


因此,您需要了解的是如何提取客户端连接的远程地址。如果您正在为服务器应用程序使用任何流行的web技术,那么这是非常容易的。

如果网络图足够复杂,我认为如果要找到您需要的内容,将非常困难。 您还应考虑到Comp1可以与Comp6建立直接连接


我可以建议的解决办法是探索。客户端从服务器接收所有其他客户端的列表,并尝试建立到每个客户端的连接。我认为,假设网络中有任意数量的路由器/防火墙/NAT,那么这将是了解哪些客户机是真正可访问的唯一方法。当然,对于大量的计算机来说,这种方法没有多大的扩展性。

如果客户机和服务器之间存在多个级别的NAT(图中只显示了一个级别),那么这种方法就不起作用。您可以有两个具有相同本地地址和相同NAT服务器地址(从web服务器的角度来看)的客户端,但它们仍然位于不同的广播域上。+1 True。让我们看看OP是一级设置还是多级设置。我一开始就是这么想的。它将在我的本地局域网工作,因为它的设置是这样的。但这不是一个非常稳健的解决方案。我无法控制公司如何设置其网络。@Amith好吧,请更改设置图以反映真实的生产环境!具有相同路由器MAC地址的客户端应用程序意味着计算机可以彼此“对话”。看起来,你有两个路由器,它们都认为自己拥有网络192.168.1.0。它们应该是不同的。@dbasnett它们应该是不同的,就像“如果它们是相同的,它将不起作用”中所说的那样,还是理想情况下它们应该是不同的。因为,如果像这样的设置是罕见的,或者通常被认为是错误的或者不是首选的,那么我的问题排序就变成了一个小问题。如果没有什么能阻止大学、公司等以这种方式建立网络,那么,我将需要解决这个问题。这难道不需要路由器、防火墙等解除特定端口的阻塞吗?我们试图避免出现这样的情况,即我们必须对现有设置进行例外处理,才能使我们的应用程序正常工作。@Amith George:广播域不涉及任何路由器。它可能涉及防火墙(取决于防火墙在哪一层工作),但如果你不能向机器发送UDP数据包,那么你可能无论如何也无法建立另一种连接。Dropbox使用这种功能;有关更多详细信息,请参阅。