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 地址的主要内容,如果未能解决你的问题,请参考以下文章

无法连接到 TFS 并从 C# 获取文件

C#如何强制等待连接到 WCF 服务

C#使用Win32函数的一些类型转换

获取使用 C# 连接到命名管道服务器的客户端的进程 ID

如何在不实际安装连接器的情况下通过 C# 使用 mysql 连接器连接到 mysql

如何从 C# 连接到 HyperSQL DB