3

ローカル マシン上のワイヤレス インターフェイスの IPv4 を決定するための次のコードがあります。

private List<IPAddressInformation> GetWifiIPAddresses()
{
    var list = new List<IPAddressInformation>();
    var networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();

    foreach (var networkInterface in networkInterfaces)
    {
        if (networkInterface.NetworkInterfaceType == NetworkInterfaceType.Wireless80211)
        {
            var interfaceAddressList = networkInterface.GetIPProperties().UnicastAddresses;
            list.AddRange(interfaceAddressList.Where(interfaceIp => interfaceIp.Address.AddressFamily == AddressFamily.InterNetwork));
        }
    }

    return list;
}

Windows 7 ではすべてが魅力的に機能しますが、Windows 8 では WLAN インターフェースがイーサネット アダプターとして決定されます。(NetworkInterfaceType == NetworkInterfaceType.Wireless80211 の代わりに NetworkInterfaceType.Ethernet)

これは、私の WLAN の ipconfig 画面です。 ここに画像の説明を入力

しかし、これはワイヤレス アダプターであり、Windows 7 では ipconfig でワイヤレス インターフェイスとして表示されます。

どうすれば解決できますか?ドライバの問題なのか、Windows 8 の仕様なのか。ローカル マシンの WLAN IP アドレスを特定するには、他にどのような方法がありますか?

ありがとう!

編集

これは、Hyper-V 仮想スイッチが原因でした。Hyper-V 仮想スイッチは実際の物理アダプターをカバーするため、.NET はそれを WiFi アダプターとして判別できません。

「Hyper-V Virtual Switch Manager」のスイッチを物理ワイヤレス アダプターから vEthernet に削除すると、Windows 7 のように正常に動作します。

しかし、それが仮想スイッチになったことは、実際の物理デバイスの適切な IP を決定するという大きな問題になる可能性があります。

4

2 に答える 2

0

スイッチを切り替えることは、物理 LAN 上のネットワーク インフラストラクチャを変更することと同じようなものです。通常、プログラムでは制御できないものです。

マシンには 1 つまたは複数のネットワーク アダプターがあるため、操作時間ごとに異なるアドレスを持つ場合があります。問題がマシンの IP アドレスの識別に関するものである場合は、おそらく再構築する必要があります。なぜ IP アドレスが必要なのですか? これは、問題に取り組む他の方法を示唆している可能性があります (アダプターの種類に依存する代わりに、アダプター名にヒューリスティックを使用するなど)。

単一の IP アドレスを考える必要がある場合は、特定のサーバーに到達するために使用されるアダプターを特定し、その IP アドレスを使用する方がよいでしょう。Win32 API GetBestRoute() がそれを提供します。

于 2013-03-01T15:34:11.077 に答える