![]() |
VOOZH | about |
dotnet add package ManagedNativeWifi --version 3.0.2
NuGet\Install-Package ManagedNativeWifi -Version 3.0.2
<PackageReference Include="ManagedNativeWifi" Version="3.0.2" />
<PackageVersion Include="ManagedNativeWifi" Version="3.0.2" />Directory.Packages.props
<PackageReference Include="ManagedNativeWifi" />Project file
paket add ManagedNativeWifi --version 3.0.2
#r "nuget: ManagedNativeWifi, 3.0.2"
#:package ManagedNativeWifi@3.0.2
#addin nuget:?package=ManagedNativeWifi&version=3.0.2Install as a Cake Addin
#tool nuget:?package=ManagedNativeWifi&version=3.0.2Install as a Cake Tool
ManagedNativeWifi is a managed implementation of Native Wifi API. It provides functionality to manage wireless networks, interfaces and profiles.
This library works on Windows and compatible with:
| .NET 8.0 | .NET Standard 2.0 (including .NET Framework 4.6.1) |
|---|
On Windows 11 (24H2) or newer, some methods require user's permission to access location information. Without the permission, UnauthorizedAccessException will be thrown. This permission can be set in Privacy & security > Location settings.
NuGet: ManagedNativeWifi
Available methods including asynchronous ones based on TAP.
| Method | Description |
|---|---|
| EnumerateInterfaces | Enumerates wireless interface information. |
| EnumerateInterfaceConnections | Enumerates wireless interface and related connection information. |
| ScanNetworksAsync | Asynchronously requests wireless interfaces to scan (rescan) wireless LANs. |
| EnumerateAvailableNetworkSsids | Enumerates SSIDs of available wireless LANs. |
| EnumerateConnectedNetworkSsids | Enumerates SSIDs of connected wireless LANs. |
| EnumerateAvailableNetworks | Enumerates wireless LAN information on available networks. |
| EnumerateAvailableNetworkGroups | Enumerates wireless LAN information on available networks and group of associated BSS networks. |
| EnumerateBssNetworks | Enumerates wireless LAN information on BSS networks. |
| GetCurrentConnection | Gets wireless connection information (connected wireless LAN only) |
| GetRssi | Gets RSSI (connected wireless LAN only). |
| GetRealtimeConnetionQuality | Gets wireless connection quality information (connected wireless LAN only, Windows 11 24H2 only) |
| EnumerateProfileNames | Enumerates wireless profile names in preference order. |
| EnumerateProfiles | Enumerates wireless profile information in preference order. |
| EnumerateProfileRadios | Enumerates wireless profile and related radio information in preference order. |
| SetProfile | Sets (add or overwrite) the content of a specified wireless profile. |
| SetProfilePosition | Sets the position of a specified wireless profile in preference order. |
| SetProfileEapXmlUserData | Sets (add or overwirte) the EAP user credentials for a specified wireless profile. |
| RenameProfile | Renames a specified wireless profile. |
| DeleteProfile | Deletes a specified wireless profile. |
| ConnectNetwork | Attempts to connect to the wireless LAN associated to a specified wireless profile. |
| ConnectNetworkAsync | Asynchronously attempts to connect to the wireless LAN associated to a specified wireless profile. |
| DisconnectNetwork | Disconnects from the wireless LAN associated to a specified wireless interface. |
| DisconnectNetworkAsync | Asynchronously disconnects from the wireless LAN associated to a specified wireless interface. |
| GetRadio | Gets wireless interface radio information of a specified wireless interface. |
| TurnOnRadio | Turns on the radio of a specified wireless interface (software radio state only). |
| TurnOffRadio | Turns off the radio of a specified wireless interface (software radio state only). |
| IsAutoConfig | Checks if automatic configuration of a specified wireless interface is enabled. |
| Property | Description |
|---|---|
| ThrowsOnAnyFailure | Whether to throw an exception when any failure occurs |
To check SSIDs of currently available wireless LANs, call EnumerateAvailableNetworkSsids method.
public static IEnumerable<string> EnumerateNetworkSsids()
{
return NativeWifi.EnumerateAvailableNetworkSsids()
.Select(x => x.ToString()); // UTF-8 string representation
}
In general, a SSID is represented by a UTF-8 string but it is not guaranteed. So if ToString method seems not to produce a valid value, try ToBytes method instead.
To check SSID, signal quality or other information on currently available wireless LANs, call EnumerateAvailableNetworks method.
public static IEnumerable<(string ssidString, int signalQuality)>
EnumerateNetworkSsidsAndSignalQualities()
{
return NativeWifi.EnumerateAvailableNetworks()
.Select(x => (x.Ssid.ToString(), x.SignalQuality));
}
To connect to a wireless LAN, call ConnectNetworkAsync asynchronous method.
public static async Task<bool> ConnectAsync()
{
var availableNetwork = NativeWifi.EnumerateAvailableNetworks()
.Where(x => !string.IsNullOrWhiteSpace(x.ProfileName))
.OrderByDescending(x => x.SignalQuality)
.FirstOrDefault();
if (availableNetwork is null)
return false;
return await NativeWifi.ConnectNetworkAsync(
interfaceId: availableNetwork.InterfaceInfo.Id,
profileName: availableNetwork.ProfileName,
bssType: availableNetwork.BssType,
timeout: TimeSpan.FromSeconds(10));
}
This method returns true if successfully connected to the wireless LAN in contrast to its synchronous sibling, ConnectNetwork method, returns true if the request for the connection succeeds and doesn't indicate the result.
To refresh currently available wireless LANs, call ScanNetworksAsync method.
public static Task RefreshAsync()
{
return NativeWifi.ScanNetworksAsync(timeout: TimeSpan.FromSeconds(10));
}
This method requests wireless interfaces to scan wireless LANs in parallel. The timeout should be ideally no more than 4 seconds, but it can vary depending on the situation.
If you want to avoid disrupting existing wireless connections, you can use ScanNetworksAsync overload method with ScanMode.OnlyNotConnected.
public static Task RefreshNotConnectedAsync()
{
return NativeWifi.ScanNetworksAsync(
mode: ScanMode.OnlyNotConnected,
null,
null,
timeout: TimeSpan.FromSeconds(10),
CancellationToken.None);
}
Please note that if all wireless interfaces are connected, naturally nothing will happen.
To delete an existing wireless profile, use DeleteProfile method. Please note that a profile name is case-sensitive.
public static bool DeleteProfile(string profileName)
{
var targetProfile = NativeWifi.EnumerateProfiles()
.Where(x => profileName.Equals(x.Name, StringComparison.Ordinal))
.FirstOrDefault();
if (targetProfile is null)
return false;
return NativeWifi.DeleteProfile(
interfaceId: targetProfile.InterfaceInfo.Id,
profileName: profileName);
}
To check wireless LAN channels that are already used by surrounding access points, call EnumerateBssNetworks method and filter the results by RSSI.
public static IEnumerable<int> EnumerateNetworkChannels(int rssiThreshold)
{
return NativeWifi.EnumerateBssNetworks()
.Where(x => x.Rssi > rssiThreshold)
.Select(x => x.Channel);
}
To turn on the radio of a wireless interface, check the current radio state by GetRadio method and then call TurnOnRadio method.
public static async Task<bool> TurnOnAsync()
{
var targetInterface = NativeWifi.EnumerateInterfaces()
.FirstOrDefault(x =>
{
var radioState = NativeWifi.GetRadio(x.Id)?.RadioStates.FirstOrDefault();
if (radioState is null)
return false;
if (!radioState.IsHardwareOn) // Hardware radio state is off.
return false;
return !radioState.IsSoftwareOn; // Software radio state is off.
});
if (targetInterface is null)
return false;
try
{
return await Task.Run(() => NativeWifi.TurnOnRadio(targetInterface.Id));
}
catch (UnauthorizedAccessException)
{
return false;
}
}
Please note that this method can only change software radio state and if hardware radio state is off (like hardware Wi-Fi switch is at off position), the radio cannot be turned on programatically.
To retrieve detailed information on wireless connections of connected wireless interfaces, you can use GetCurrentConnection, GetRssi, GetRealtimeConnectionQuality methods depending on your needs.
public static void ShowConnectedNetworkInformation()
{
foreach (var interfaceId in NativeWifi.EnumerateInterfaces()
.Where(x => x.State is InterfaceState.Connected)
.Select(x => x.Id))
{
// Following methods work only with connected wireless interfaces.
var (result, cc) = NativeWifi.GetCurrentConnection(interfaceId);
if (result is ActionResult.Success)
{
Trace.WriteLine($"Profile: {cc.ProfileName}");
Trace.WriteLine($"SSID: {cc.Ssid}");
Trace.WriteLine($"PHY type: 802.11{cc.PhyType.ToProtocolName()}");
Trace.WriteLine($"Authentication algorithm: {cc.AuthenticationAlgorithm}");
Trace.WriteLine($"Cipher algorithm: {cc.CipherAlgorithm}");
Trace.WriteLine($"Signal quality: {cc.SignalQuality}");
Trace.WriteLine($"Rx rate: {cc.RxRate} Kbps");
Trace.WriteLine($"Tx rate: {cc.TxRate} Kbps");
}
// GetRealtimeConnectionQuality method works only on Windows 11 24H2.
(result, var rcq) = NativeWifi.GetRealtimeConnectionQuality(interfaceId);
if (result is ActionResult.Success)
{
Trace.WriteLine($"PHY type: 802.11{rcq.PhyType.ToProtocolName()}");
Trace.WriteLine($"Link quality: {rcq.LinkQuality}");
Trace.WriteLine($"Rx rate: {rcq.RxRate} Kbps");
Trace.WriteLine($"Tx rate: {rcq.TxRate} Kbps");
Trace.WriteLine($"MLO connection: {rcq.IsMultiLinkOperation}");
if (rcq.Links.Count > 0)
{
var link = rcq.Links[0];
Trace.WriteLine($"RSSI: {link.Rssi}");
Trace.WriteLine($"Frequency: {link.Frequency} MHz");
Trace.WriteLine($"Bandwidth: {link.Bandwidth} MHz");
}
}
else if (result is ActionResult.NotSupported)
{
(result, int rssi) = NativeWifi.GetRssi(interfaceId);
if (result is ActionResult.Success)
{
Trace.WriteLine($"RSSI: {rssi}");
}
}
}
}
The returned Tuple has result member and if the wireless interface is not connected, it will be ActionResult.NotConnected.
Ver 3.0.2 2025-7-5
Ver 3.0.1 2025-7-4
Ver 2.8 2025-5-18
Ver 2.7.1 2025-4-10
Ver 2.7 2025-1-25
| Authentication | AuthenticationAlgorithm | AuthenticationMethod |
|---|---|---|
| WPA3 Enterprise 192-bit mode | WPA3_ENT_192 | WPA3_Enterprise_192 |
| WPA3 Enterprise | WPA3_ENT | WPA3_Enterprise |
| OWE | OWE | OWE |
Ver 2.6 2024-7-5
Ver 2.5 2023-1-9
Ver 2.4 2022-11-24
Ver 2.3 2022-8-1
Ver 2.2 2022-7-25
Ver 2.1 2021-3-30
Ver 2.0 2021-2-4
Ver 1.8 2020-12-20
Ver 1.7 2020-9-29
Ver 1.6 2020-8-4
Ver 1.5 2019-12-1
Ver 1.4 2018-9-2
Ver 1.0 2015-1-30
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 net5.0 was computed. net5.0-windows net5.0-windows was computed. net6.0 net6.0 was computed. net6.0-android net6.0-android was computed. net6.0-ios net6.0-ios was computed. net6.0-maccatalyst net6.0-maccatalyst was computed. net6.0-macos net6.0-macos was computed. net6.0-tvos net6.0-tvos was computed. net6.0-windows net6.0-windows was computed. net7.0 net7.0 was computed. net7.0-android net7.0-android was computed. net7.0-ios net7.0-ios was computed. net7.0-maccatalyst net7.0-maccatalyst was computed. net7.0-macos net7.0-macos was computed. net7.0-tvos net7.0-tvos was computed. net7.0-windows net7.0-windows was computed. net8.0 net8.0 is compatible. net8.0-android net8.0-android was computed. net8.0-browser net8.0-browser was computed. net8.0-ios net8.0-ios was computed. net8.0-maccatalyst net8.0-maccatalyst was computed. net8.0-macos net8.0-macos was computed. net8.0-tvos net8.0-tvos was computed. net8.0-windows net8.0-windows was computed. net9.0 net9.0 was computed. net9.0-android net9.0-android was computed. net9.0-browser net9.0-browser was computed. net9.0-ios net9.0-ios was computed. net9.0-maccatalyst net9.0-maccatalyst was computed. net9.0-macos net9.0-macos was computed. net9.0-tvos net9.0-tvos was computed. net9.0-windows net9.0-windows was computed. net10.0 net10.0 was computed. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 netcoreapp2.0 was computed. netcoreapp2.1 netcoreapp2.1 was computed. netcoreapp2.2 netcoreapp2.2 was computed. netcoreapp3.0 netcoreapp3.0 was computed. netcoreapp3.1 netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 netstandard2.0 is compatible. netstandard2.1 netstandard2.1 was computed. |
| .NET Framework | net461 net461 was computed. net462 net462 was computed. net463 net463 was computed. net47 net47 was computed. net471 net471 was computed. net472 net472 was computed. net48 net48 was computed. net481 net481 was computed. |
| MonoAndroid | monoandroid monoandroid was computed. |
| MonoMac | monomac monomac was computed. |
| MonoTouch | monotouch monotouch was computed. |
| Tizen | tizen40 tizen40 was computed. tizen60 tizen60 was computed. |
| Xamarin.iOS | xamarinios xamarinios was computed. |
| Xamarin.Mac | xamarinmac xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos xamarinwatchos was computed. |
Showing the top 5 NuGet packages that depend on ManagedNativeWifi:
| Package | Downloads |
|---|---|
|
Meadow.Windows
An implementation of the Meadow software stack for Windows targets |
|
|
Meadow.Desktop
Cross-platform desktop .NET libraries for Wilderness Labs Meadow |
|
|
Twotwo.CommonTools
Package Description |
|
|
HardwareIds.NET
Simple .NET library capable of tracking users across re-installs and hardware components swapping, and even entirely new computer using the neighborhood's network endpoints. |
|
|
IsrarCommonLib
Commons utility library |
Showing the top 4 popular GitHub repositories that depend on ManagedNativeWifi:
| Repository | Stars |
|---|---|
|
BartoszCichecki/LenovoLegionToolkit
Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops.
|
|
|
LenovoLegionToolkit-Team/LenovoLegionToolkit
Lenovo Legion Toolkit (LLT) is a Windows desktop utility created for Lenovo gaming laptops that replaces Lenovo Vantage, Legion Zone, and Legion Space.
|
|
|
Leo-Corporation/InternetTest
InternetTest is a modern connection utility for Windows. It can locate IP addresses, send ping request, recover your WiFi passwords and more!
|
|
|
emoacht/Wifinian
A Windows desktop tool to enable user to actively control Wi-Fi connections
|