1

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

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

WLAN Connected
LAN Disconnected

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

WLAN Connected
LAN Connected

Observed:显示正确的 WLAN 地址,显示正确的 LAN 地址
预期:显示正确的 WLAN 地址,显示正确的 LAN 地址

ipconfig 读取正确的地址

WLAN Disconnected
LAN Connected

Observed:显示正确的 WLAN 地址,显示正确的 LAN 地址
预期:未显示 WLAN 地址(已断开连接),正确的 LAN 显示
ipconfig 读取 WLAN 的“Media disconnected”

这是代码块:

_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 物有所值

4

1 回答 1

2

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

LAN断开时的“奇怪”IP地址来自APIPA(自动专用IP寻址)。Windows Vista 引入的“功能”:

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

于 2012-06-14T14:37:37.073 回答