【发布时间】:2011-04-10 10:17:13
【问题描述】:
是否有人有一些代码可以确定 IP 地址(IPv4 或 IPv6)是否与运行应用程序的机器位于同一子网上?我已经看到了许多使用 IPv4 执行此操作的代码示例,但我找不到任何支持 IPv6 的代码示例。
编辑:
我不确定我是否了解 v4 和 v6 之间的所有差异,所以我的问题还有一点。我有一个同时服务于 Internet 客户端和 Intranet 客户端的应用程序,也就是说,有一些客户端与服务器位于同一物理网络上。所以有时客户端之间有路由器,有时没有。使用 IPv4,我可以通过检查客户端 IP 地址与服务器 IP 地址和子网来确定这一点,所以如果我的服务器的 IP 和子网掩码分别是:
192.168.123.15 255.255.255.0
服务器收到来自 192.168.123.100 的客户端请求,我知道客户端和服务器之间没有路由器。但是,如果服务器收到来自 192.168.1.100 或 67.7.23.4 的客户端请求,我知道在这些客户端和服务器之间有一个路由器。在 .Net 中,我可以收集客户端和服务器 IP 地址(v4 和 v6),但找不到 IPv6 子网掩码。
有没有办法在 .Net 中收集这些信息,还是我误解了 IPv4 和 IPv6 之间的一些区别?
编辑 x2:
我在 MS Connect 站点上发布了这个,看看他们是否正在处理这件事,或者他们没有向 UnicastIPAddressInformation 类添加 IPv6Mask 属性是否有原因。
大约在同一时间,我还在 MSDN 论坛上发布了相同的问题。 1800+ 次浏览,没有一个回复。我想我不是唯一对此感到好奇的人。
【问题讨论】:
-
如何提供 IPv6 地址?是否使用了转换机制或者是 DHCPv6?
-
好吧,我正试图让它在任何情况下都能发挥作用,所以让我们说两个?
-
也许这真的应该从 serverfault.com 询问
-
不,这是一个关于如何以编程方式确定客户端和服务器是否在同一个子网上的问题。