2

下午好,

当本地计算机通过 VPN (RAS) 连接到远程 Windows 域网络时,任何人都可以举例说明如何获取本地计算机的 IP 地址吗?即我需要VPN 地址而不是远程用户的本地网络地址。

例如,我的服务器端 Windows 服务与我的客户端应用程序通信,需要创建所有连接用户及其 IP 地址的日志。

在本地网络上使用计算机时,此解决方案非常简单,但我想知道如何获取通过 VPN 连接到服务器的用户的 IP 地址。请注意,IP 地址获取方法将在客户端执行并发送到服务器。

这是我当前的代码,仅在本地连接到域网络时才有效:

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 之类的域。

非常感谢您抽出宝贵的时间,我期待着阅读您的回复。

4

1 回答 1

0

正如@MarcB 的评论所指出的那样,想不出一个很好的理由为什么你可能想要这些信息......所以如果你能出于好奇而在应用程序中解释它的用途会很有趣。

但是,这里和网上有很多关于使用 Dns.GetHostAddresses 枚举机器 IP 地址的错误答案。似乎大多数人都没有意识到在配置的 DNS 解析器中查找机器名称与枚举机器地址之间的区别。这些是非常不同的事情,虽然在许多情况下它似乎返回了正确的结果,但这绝对是错误的做法,因为它们不是一回事。例如,请参阅此处指向文章的链接,其中原始发帖人将不正确的响应标记为答案,但正确的响应在 @StephanCleary 下方。请参阅: 获取 IPv4 地址

不同之处在于您要查看机器配置并枚举您有兴趣从机器自己的 TCPIP 堆栈中定位的任何 IP 地址。上面的代码和许多不正确的响应尝试在 DNS 解析器中查找名称。一旦该部分正确,那么您应该能够根据网络适配器(通过名称或其他属性)确定 VPN 连接。

于 2012-11-14T16:40:48.387 回答