【问题标题】:Network Interface Sub Type .Net Framework 4.0网络接口子类型 .Net Framework 4.0
【发布时间】:2012-08-08 00:38:58
【问题描述】:

我可以使用 C# 4.0 检测网络适配器类型

NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface adapter in interfaces)
{
    Console.WriteLine(adapter.NetworkInterfaceType)       
}

但是我找不到枚举器或正确的方法(适配器名称除外)来检测 Wifi、3g 等适配器子类型。Windows 手机有一个名为 NetworkInterfaceSubType 的属性可以完成此操作,但是在 .网络框架 4.0。

我真的很想避免使用名称作为标识符(例如“无线网络”、“蓝牙网络”),这无法在系统之间进行验证。

谢谢

【问题讨论】:

    标签: c# .net networking adapter 3g


    【解决方案1】:

    看看Managed Wifi API它是基于Native Wifi API的,根据代码示例很容易做到

    using NativeWifi;
    using System;
    using System.Text;
    
    namespace WifiExample
    {
        class Program
        {
            /// <summary>
            /// Converts a 802.11 SSID to a string.
            /// </summary>
            static string GetStringForSSID(Wlan.Dot11Ssid ssid)
            {
                return Encoding.ASCII.GetString( ssid.SSID, 0, (int) ssid.SSIDLength );
            }
    
            static void Main( string[] args )
            {
                WlanClient client = new WlanClient();
                foreach ( WlanClient.WlanInterface wlanIface in client.Interfaces )
                {
                    // Lists all networks with WEP security
                    Wlan.WlanAvailableNetwork[] networks = wlanIface.GetAvailableNetworkList( 0 );
                    foreach ( Wlan.WlanAvailableNetwork network in networks )
                    {
                        if ( network.dot11DefaultCipherAlgorithm == Wlan.Dot11CipherAlgorithm.WEP )
                        {
                            Console.WriteLine( "Found WEP network with SSID {0}.", GetStringForSSID(network.dot11Ssid));
                        }
                    }
    
                    // Retrieves XML configurations of existing profiles.
                    // This can assist you in constructing your own XML configuration
                    // (that is, it will give you an example to follow).
                    foreach ( Wlan.WlanProfileInfo profileInfo in wlanIface.GetProfiles() )
                    {
                        string name = profileInfo.profileName; // this is typically the network's SSID
                        string xml = wlanIface.GetProfileXml( profileInfo.profileName );
                    }
    
                    // Connects to a known network with WEP security
                    string profileName = "Cheesecake"; // this is also the SSID
                    string mac = "52544131303235572D454137443638";
                    string key = "hello";
                    string profileXml = string.Format("<?xml version=\"1.0\"?><WLANProfile xmlns=\"http://www.microsoft.com/networking/WLAN/profile/v1\"><name>{0}</name><SSIDConfig><SSID><hex>{1}</hex><name>{0}</name></SSID></SSIDConfig><connectionType>ESS</connectionType><MSM><security><authEncryption><authentication>open</authentication><encryption>WEP</encryption><useOneX>false</useOneX></authEncryption><sharedKey><keyType>networkKey</keyType><protected>false</protected><keyMaterial>{2}</keyMaterial></sharedKey><keyIndex>0</keyIndex></security></MSM></WLANProfile>", profileName, mac, key);
                    wlanIface.SetProfile( Wlan.WlanProfileFlags.AllUser, profileXml, true );
                    wlanIface.Connect( Wlan.WlanConnectionMode.Profile, Wlan.Dot11BssType.Any, profileName );
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多