C# - 连接到 (RAS) *** 时如何获取 IP 地址
Posted
技术标签:
【中文标题】C# - 连接到 (RAS) *** 时如何获取 IP 地址【英文标题】:C# - How to get IP Address when connected to (RAS) *** 【发布时间】:2012-11-03 03:05:50 【问题描述】:下午好,
谁能举例说明当本地机器通过 *** (RAS) 连接到远程 windows 域网络时如何获取本地机器的 IP 地址?即我需要 *** 地址,而不是远程用户的本地网络地址。
例如,我的服务器端 Windows 服务与我的客户端应用程序通信,需要创建所有连接用户及其 IP 地址的日志。
当使用本地网络上的计算机时,此解决方案非常简单,但我想知道如何获取通过 *** 连接到服务器的用户的 IP 地址。请注意,IP地址get方法将在客户端执行并发送到服务器。
这是我当前的代码,仅在本地连接到域网络时才有效:
public static string GetLocalIPv4()
string ipv4Address = String.Empty;
foreach (IPAddress currrentIPAddress in Dns.GetHostAddresses(Dns.GetHostName()))
if (currrentIPAddress.AddressFamily.ToString() == System.Net.Sockets.AddressFamily.InterNetwork.ToString())
ipv4Address = currrentIPAddress.ToString();
break;
return ipv4Address;
我们的内部网络由 Windows SBS 控制,并使用诸如 mycompany.local 之类的域。
非常感谢您抽出宝贵时间,期待阅读您的回复。
罗伯
【问题讨论】:
*** 另一端的远程地址几乎没有任何用处。考虑有人通过蜂窝数据链路进入 - 他们的 IP 将是蜂窝公司 NAT 网关后面的一些 10.x.x.x 私有 IP。对于使用酒店免费无线网络等的人来说也是如此...... 【参考方案1】:正如@MarcB 的评论所指出的,你想不出一个很好的理由来说明你可能想要这些信息......所以如果你能仅仅出于好奇而在应用程序中解释它的用途,那将会很有趣。
然而,这里和网上有很多关于使用 Dns.GetHostAddresses 枚举机器 IP 地址的错误答案。似乎大多数人都没有意识到在配置的 DNS 解析器中查找机器名称与枚举机器地址之间的区别。这些是非常不同的事情,虽然在许多情况下它似乎返回了正确的结果,但这绝对是错误的做法,因为它们不是同一件事。例如,请参阅此处指向文章的链接,其中原始发帖人将不正确的响应标记为答案,但正确的响应在@StephanCleary 下方。看: Get IPv4 Addresses
不同之处在于您要查看机器配置并枚举您有兴趣从机器自己的 TCPIP 堆栈中定位的任何 IP 地址。上面的代码和许多不正确的响应尝试在 DNS 解析器中查找名称。一旦这部分正确,那么您应该能够根据网络适配器(通过名称或其他属性)确定 *** 连接。
【讨论】:
以上是关于C# - 连接到 (RAS) *** 时如何获取 IP 地址的主要内容,如果未能解决你的问题,请参考以下文章