Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I get the available wifi APs and their signal strength in .net?

Is there any way to access all WiFi access points and their respective RSSI values using .NET? It would be really nice if I could do it without using unmanaged code or even better if it worked in mono as well as .NET.

If it is possible i would appriciate a code sample. Thanks


Here are a few similiar stackoverflow questions i found:

-Get SSID of the wireless network I am connected to with C# .Net on Windows Vista

-Managing wireless network connection in C#

-Get BSSID (MAC address) of wireless access point from C#

like image 371
LDomagala Avatar asked Jan 30 '09 18:01

LDomagala


People also ask

How do I check my AP signal strength?

In Windows, go to Network and Internet, and then Network and Sharing Center. Select the blue WiFi link to see the signal strength. On an Android phone or tablet. Look under Settings, WiFi, or Network, and search for a gear or WiFi icon next to the network you're connected to.

Is there an app to check Wi-Fi signal strength?

On Android, download the Wi-Fi Speed Test app. It's a favourite of ours because it's also a handy way to test the connection speed between your phone and your router, not your broadband speed. However, here it's useful because it reports signal strength.

How do I know if my Wi-Fi signal is strong?

Checking Wi-Fi Signal Strength the Easy Way Whether it's using an iPhone, iPad, Android, Mac, or Windows PC, you should have a Wi-Fi connection indicator. Usually, four or five curved lines make up the Wi-Fi symbol, and the more that are filled, the stronger the connection.

How can I analyze my Wi-Fi signal?

To analyze a WiFi signal, you need a computer with a WiFi card and a WiFi signal analyzer like NetSpot. You can then simply start the WiFi signal analyzer, wait for it to gather information about the signal, and see if you can spot anything unusual.


2 Answers

It is a wrapper project with managed code in c# at http://www.codeplex.com/managedwifi

It supports Windows Vista and XP SP2 (or later version).

sample code:

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 );             }         }     } } 
like image 169
Jirapong Avatar answered Sep 22 '22 11:09

Jirapong


If the platform is Windows10, you can use Microsoft.Windows.SDK.Contracts package to access all available wifis.

First, install Microsoft.Windows.SDK.Contracts package from nuget.

Then, you can use next code to get ssid and signal strength.

var adapters = await WiFiAdapter.FindAllAdaptersAsync(); foreach (var adapter in adapters) {     foreach (var network in adapter.NetworkReport.AvailableNetworks)     {         Console.WriteLine($"ssid: {network.Ssid}");         Console.WriteLine($"signal strength: {network.SignalBars}");     } } 
like image 31
wangch Avatar answered Sep 21 '22 11:09

wangch