如何在.net中获得可用的无线接入点及其信号强度?

有没有办法使用.NET访问所有的WiFi接入点和它们各自的RSSI值? 如果我可以不使用非托pipe代码,或者在单声道以及.NET环境下工作的话,那将会非常好。

如果有可能,我会appriciate代码示例。 谢谢


这里是我发现的几个类似的stackoverflow问题:

– 获取我在Windows Vista上使用C#.Net连接的无线networking的SSID

– 在C#中pipe理无线networking连接

– 从C#获取无线接入点的BSSID(MAC地址)

这是一个包含C#托管代码的包装项目, 网址为http://www.codeplex.com/managedwifi

它支持Windows Vista和XP SP2(或更高版本)。

示例代码:

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 ); } } } } 

使用所有Vista和XP SP3系统上的本地Wifi API。 XP SP2有一个不同的API,你可以做同样的事情。

如何枚举网络

如何获得信号强度

可能能够使用WMI查询来实现它。 看看这个线程 。

如果您使用的是vista,wmi不适用于所有的网络适配器,vista的另一种选择是使用netsh命令。 看看这个codeproject文章。

我找到了另一种方式来做到这一点,虽然这确实花了一些钱。

在etherether.net上有一个.NET lib可以让你获得以太网驱动。