Windows 7 与 XP GetIsNetworkAvailable() 的区别

本文关键字:区别 GetIsNetworkAvailable XP Windows | 更新日期: 2023-09-27 18:37:24

我编写了代码来填充计算机上可用的IPv4 NICards菜单。 它已经在XP机器上进行了测试,看起来一切都很好(它也是在XP上构建的)。

我在 Windows 7 上对其进行了测试,即使一个 IP 地址断开连接,它也始终填充 2 个 IP 地址。 以下是 Win7 计算机的结果:

无线局域网连接
局域网已断开连接

已观察到:显示正确的WLAN地址,显示不正确的LAN地址(它甚至是一个连接到192.168的不同网络号,但是菜单中填充的LAN地址是169.254)
预期:显示正确的 WLAN 地址,未显示 LAN (已断开连接)
ipconfig 读取 LAN
的"媒体已断开连接"

无线局域网连接
局域网已连接

已观察:显示正确的 WLAN 地址,显示
正确的 LAN 地址预期:显示正确的 WLAN 地址,显示

正确的 LAN 地址ipconfig 读取正确的地址

无线局域网已断开连接
局域网已连接

已观察:显示正确的 WLAN 地址,显示
正确的 LAN 地址预期:未显示 WLAN 地址(已断开连接),显示正确的 LAN
ipconfig 读取 WLAN 的"媒体已断开连接"

这是代码块:

_adapters.Clear();
if (NetworkInterface.GetIsNetworkAvailable())
{
    NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();
    foreach (NetworkInterface adapter in networkInterfaces)
    {
        foreach (UnicastIPAddressInformation addr in adapter.GetIPProperties().UnicastAddresses)
        {
            //This filters out IPv6 and Loopback NICs
            if (addr.Address.AddressFamily == AddressFamily.InterNetwork
                && adapter.NetworkInterfaceType != NetworkInterfaceType.Loopback) 
            {    //This formats something like: 192.168.1.0 - Ethernet adapter Local Network Connection
                _adapters.Add(addr.Address.ToString() + " - " + adapter.NetworkInterfaceType.ToString() + " adapter " + adapter.Name);
            }
        }
    }
}

在VS2010上使用4.0 .NET的价值

Windows 7 与 XP GetIsNetworkAvailable() 的区别

要查看 NIC 是否已连接,您应该检查 NetworkInterface.OperationalStatus 属性。

局域网断开连接时的"奇怪"IP地址来自APIPA(自动专用IP寻址)。Windows Vista 引入的一个"功能":

。Windows Vista 中的一项功能,用于在 DHCP 服务器不可用时自动使用 IP 地址和子网掩码配置自身。IP 地址范围为 169.254.0.1 到 169.254.255.254,这是专门为Microsoft保留的范围。