/// <summary> /// Gets all the available wireless interfaces on the current machine /// </summary> /// <returns>List of <see cref="WirelessInterface" /></returns> public List<WirelessInterface> GetAvailableWirelessInterfaces() { IntPtr handle; uint result = NativeWireless.WlanEnumInterfaces(this.GetHandle(), IntPtr.Zero, out handle); result.ThrowIfNotSuccess(); var wlanInterfaceInfoList = new WLAN_INTERFACE_INFO_LIST(handle); NativeWireless.WlanFreeMemory(handle); // convert the native type to something we can pass on to the front List<WirelessInterface> wirelessInterfaces = wlanInterfaceInfoList.InterfaceInfo.Select(e => new WirelessInterface(e.InterfaceGuid, e.strInterfaceDescription)).ToList(); return wirelessInterfaces; }
//******************************************************************************************** // Function: GetInterfaceAndProfileName // // Description: Display the list of interfaces, and associated profile names, and get the user interested interface // Guid and the profile name // //******************************************************************************************** public static HRESULT GetInterfaceAndProfileName(out Guid intfGuid, out string profName) { Win32Error dwRet = default; //variables used for WlanEnumInterfaces WLAN_INTERFACE_INFO_LIST pIfList = default; intfGuid = default; profName = default; //open handle to WLAN using var hWlan = WlanOpenHandle(); if (!hWlan.IsInvalid) { //Get the list of interfaces for WLAN dwRet = WlanEnumInterfaces(hWlan, default, out pIfList);
static void Main(string[] args) { //1.首先回去句柄 uint serviceVersion = 0; IntPtr handle = IntPtr.Zero; uint result = WlanOpenHandle(2, IntPtr.Zero, out serviceVersion, ref handle); if (result == 0) { try { //2.列举无线设备,如果你有几个无线网卡,这里就需要选择使用哪一个无线网卡设备 IntPtr ppInterfaceList = IntPtr.Zero; WLAN_INTERFACE_INFO_LIST interfaceList; result = WlanEnumInterfaces(handle, IntPtr.Zero, ref ppInterfaceList); if (result == 0) { interfaceList = new WLAN_INTERFACE_INFO_LIST(ppInterfaceList); //记得释放内存 WlanFreeMemory(ppInterfaceList); //3.假设只有一个无线设备,通过这个无线设置获取可见网络列表 IntPtr ppAvailableNetworkList = new IntPtr(); result = WlanGetAvailableNetworkList(handle, ref interfaceList.InterfaceInfo[0].InterfaceGuid, 0x00000002, new IntPtr(), ref ppAvailableNetworkList); if (result == 0) { WLAN_AVAILABLE_NETWORK_LIST wlan_available_network_list = new WLAN_AVAILABLE_NETWORK_LIST(ppAvailableNetworkList); //这里也不要忘记释放内存 WlanFreeMemory(ppAvailableNetworkList); //打印结果出来看看 for (int i = 0; i < wlan_available_network_list.wlanAvailableNetwork.Length; i++) { Console.WriteLine(wlan_available_network_list.wlanAvailableNetwork[i].dot11Ssid.ucSSID); } } } } catch (Exception) { throw; } finally { //记得要关闭句柄 WlanCloseHandle(handle, IntPtr.Zero); } } }
/// <summary> /// 获取无线网络的过程 /// </summary> public WLAN_AVAILABLE_NETWORK_LIST EnumerateAvailableNetwork() { WLAN_AVAILABLE_NETWORK_LIST wlanAvailableNetworkList = new WLAN_AVAILABLE_NETWORK_LIST(); uint serviceVersion = 0; IntPtr handle = IntPtr.Zero; int result; result = (int)WlanOpenHandle(2, IntPtr.Zero, out serviceVersion, ref handle); //Console.WriteLine(result); IntPtr ppInterfaceList = IntPtr.Zero; WLAN_INTERFACE_INFO_LIST interfaceList; if (WlanEnumInterfaces(handle, IntPtr.Zero, ref ppInterfaceList) == 0) { interfaceList = new WLAN_INTERFACE_INFO_LIST(ppInterfaceList); //Console.WriteLine("有{0}个无线网络适配器", interfaceList.dwNumberOfItems); //Console.WriteLine("Enumerating Wireless Network Adapters..."); for (int i = 0; i < interfaceList.dwNumberOfItems; i++) { //Console.WriteLine("{0}", interfaceList.InterfaceInfo[i].strInterfaceDescription); IntPtr ppAvailableNetworkList = new IntPtr(); Guid pInterfaceGuid = interfaceList.InterfaceInfo[i].InterfaceGuid; WlanGetAvailableNetworkList(handle, ref pInterfaceGuid, 0x00000002, new IntPtr(), ref ppAvailableNetworkList); wlanAvailableNetworkList = new WLAN_AVAILABLE_NETWORK_LIST(ppAvailableNetworkList); WlanFreeMemory(ppAvailableNetworkList); WlanCloseHandle(handle, IntPtr.Zero); //for (int j = 0; j < wlanAvailableNetworkList.dwNumberOfItems; j++) //{ // WLAN_AVAILABLE_NETWORK network = wlanAvailableNetworkList.wlanAvailableNetwork[j]; // Console.ForegroundColor = ConsoleColor.Red; // Console.WriteLine("Available Network: "); // Console.WriteLine("SSID: " + network.dot11Ssid.ucSSID); // Console.WriteLine("StrProfile:" + network.strProfileName); // Console.WriteLine("Encrypted: " + network.bSecurityEnabled); // Console.WriteLine("Signal Strength: " + network.wlanSignalQuality); // Console.WriteLine("Default Authentication: " + // network.dot11DefaultAuthAlgorithm.ToString()); // Console.WriteLine("Default Cipher: " + network.dot11DefaultCipherAlgorithm.ToString()); // Console.WriteLine(); // Console.Read(); //} return(wlanAvailableNetworkList); } } return(wlanAvailableNetworkList); }
public static WLAN_INTERFACE_INFO_LIST EnumerateNICs() { IntPtr pClientHandle = m_pClientHandle; IntPtr ppInterfaceList = IntPtr.Zero; if (WlanEnumInterfaces(m_pClientHandle, IntPtr.Zero, out ppInterfaceList) != 0) { m_errorMessage = "Failed WlanEnumInterfaces()"; } WLAN_INTERFACE_INFO_LIST interfaceList = new WLAN_INTERFACE_INFO_LIST(ppInterfaceList); if (ppInterfaceList != IntPtr.Zero) { WlanFreeMemory(ppInterfaceList); } return(interfaceList); }
/// <summary> /// enumerate wireless network adapters using wifi api /// </summary> public bool EnumerateNICs(string SSID) { uint version = 2; uint serviceVersion = 0; IntPtr handle = IntPtr.Zero; bool connectPass = false; int connetCount = 0; //Open WLAN handler try { if (WlanOpenHandle(version, IntPtr.Zero, out serviceVersion, ref handle) == ERROR_SUCCESS) { while (connetCount < 3 && connectPass == false) { IntPtr ppInterfaceList = IntPtr.Zero; WLAN_INTERFACE_INFO_LIST interfaceList; ExecuteCommand("netsh wlan connect name=" + SSID + " ssid=" + SSID); System.Threading.Thread.Sleep(500); //Enumerates all of the wireless LAN interfaces currently enabled if (WlanEnumInterfaces(handle, IntPtr.Zero, ref ppInterfaceList) == ERROR_SUCCESS) { //Tranfer all values from IntPtr to WLAN_INTERFACE_INFO_LIST structure interfaceList = new WLAN_INTERFACE_INFO_LIST(ppInterfaceList); //檢查是否連線成功 if (getStateDescription(interfaceList.InterfaceInfo[0].isState) == "connected") { connectPass = true; } else { connetCount++; } if (ppInterfaceList != IntPtr.Zero) { WlanFreeMemory(ppInterfaceList); } } } WlanCloseHandle(handle, IntPtr.Zero); } } catch { MessageBox.Show("WiFi status error!!"); } return(connectPass); }
static void Main(string[] args) { Console.Write("Searching for valid Wi-Fi devices... "); IntPtr pdwNegotiatedVersion = IntPtr.Zero; IntPtr phClientHandle = IntPtr.Zero; int iSucces = WlanOpenHandle(2, IntPtr.Zero, out pdwNegotiatedVersion, out phClientHandle); IntPtr ppInterfaceList = IntPtr.Zero; iSucces = WlanEnumInterfaces(phClientHandle, IntPtr.Zero, out ppInterfaceList); WLAN_INTERFACE_INFO_LIST infoList = new WLAN_INTERFACE_INFO_LIST(ppInterfaceList); Console.WriteLine(Environment.NewLine + "Success Status: " + iSucces.ToString()); Console.Write("Beginning WFD device discovery... "); Console.WriteLine("Press any key to end the program."); Console.ReadKey(true); }
/// <summary > /// Get WLAN I/F info /// 端末の無線LANインターフェースから接続済みのNIC情報を取得する /// </summary > public void EnumerateNICs() { uint serviceVersion = 0; IntPtr handle = IntPtr.Zero; if (WlanOpenHandle(WLAN_API_VERSION_2_0, IntPtr.Zero, out serviceVersion, out handle) == ERROR_SUCCESS) { IntPtr ppInterfaceList = IntPtr.Zero; WLAN_INTERFACE_INFO_LIST interfaceList; var availableNetworkList = IntPtr.Zero; var queryData = IntPtr.Zero; if (WlanEnumInterfaces(handle, IntPtr.Zero, out ppInterfaceList) == ERROR_SUCCESS) { // Transfer all values from IntPtr to WLAN_INTERFACE_INFO_LIST structure interfaceList = new WLAN_INTERFACE_INFO_LIST(ppInterfaceList); Console.WriteLine("Enumerating Wireless Network Adapters..."); for (int i = 0; i < interfaceList.dwNumberofItems; i++) { Console.WriteLine("{0}-->{1}", interfaceList.InterfaceInfo[i].strInterfaceDescription, getStateDescription(interfaceList.InterfaceInfo[i].isState)); uint dataSize; if (WlanQueryInterface(handle, interfaceList.InterfaceInfo[i].InterfaceGuid, WLAN_INTF_OPCODE.wlan_intf_opcode_current_connection, IntPtr.Zero, out dataSize, ref queryData, IntPtr.Zero) != ERROR_SUCCESS) continue; // Connected WLAN I/F items only var connection = (WLAN_CONNECTION_ATTRIBUTES)Marshal.PtrToStructure(queryData, typeof(WLAN_CONNECTION_ATTRIBUTES)); if (connection.isState != WLAN_INTERFACE_STATE.wlan_interface_state_connected) continue; var association = connection.wlanAssociationAttributes; Console.WriteLine(" SSID: {0}, BSSID: {1}, Signal: {2}", association.dot11Ssid, association.dot11Bssid, association.wlanSignalQuality); // Hold WLAN I/F SSID and MAC address info ssid = association.dot11Ssid.ToString(); macad = association.dot11Bssid.ToString(); break; } // Release memory if (ppInterfaceList != IntPtr.Zero) WlanFreeMemory(ppInterfaceList); } // Delete handle WlanCloseHandle(handle, IntPtr.Zero); } }
/// <summary> /// Gets SSIDs of connected wireless LANs. /// </summary> /// <returns>SSIDs</returns> public static IEnumerable <string> GetConnectedNetworkSsids() { var clientHandle = IntPtr.Zero; var interfaceList = IntPtr.Zero; var queryData = IntPtr.Zero; try { uint negotiatedVersion; if (WlanOpenHandle( 2, // Client version for Windows Vista and Windows Server 2008 IntPtr.Zero, out negotiatedVersion, out clientHandle) != ERROR_SUCCESS) { yield break; } if (WlanEnumInterfaces( clientHandle, IntPtr.Zero, out interfaceList) != ERROR_SUCCESS) { yield break; } var interfaceInfoList = new WLAN_INTERFACE_INFO_LIST(interfaceList); Debug.WriteLine("Interface count: {0}", interfaceInfoList.dwNumberOfItems); foreach (var interfaceInfo in interfaceInfoList.InterfaceInfo) { uint dataSize; if (WlanQueryInterface( clientHandle, interfaceInfo.InterfaceGuid, WLAN_INTF_OPCODE.wlan_intf_opcode_current_connection, IntPtr.Zero, out dataSize, ref queryData, IntPtr.Zero) != ERROR_SUCCESS) // If not connected to a network, ERROR_INVALID_STATE will be returned. { continue; } var connection = (WLAN_CONNECTION_ATTRIBUTES)Marshal.PtrToStructure(queryData, typeof(WLAN_CONNECTION_ATTRIBUTES)); if (connection.isState != WLAN_INTERFACE_STATE.wlan_interface_state_connected) { continue; } var association = connection.wlanAssociationAttributes; Debug.WriteLine("Interface: {0}, SSID: {1}, BSSID: {2}, Signal: {3}", interfaceInfo.strInterfaceDescription, association.dot11Ssid, association.dot11Bssid, association.wlanSignalQuality); yield return(association.dot11Ssid.ToString()); } } finally { if (queryData != IntPtr.Zero) { WlanFreeMemory(queryData); } if (interfaceList != IntPtr.Zero) { WlanFreeMemory(interfaceList); } if (clientHandle != IntPtr.Zero) { WlanCloseHandle(clientHandle, IntPtr.Zero); } } }
/// <summary> /// Gets SSIDs of available wireless LANs. /// </summary> /// <returns>SSIDs</returns> public static IEnumerable <string> GetAvailableNetworkSsids() { var clientHandle = IntPtr.Zero; var interfaceList = IntPtr.Zero; var availableNetworkList = IntPtr.Zero; try { uint negotiatedVersion; if (WlanOpenHandle( 2, // Client version for Windows Vista and Windows Server 2008 IntPtr.Zero, out negotiatedVersion, out clientHandle) != ERROR_SUCCESS) { yield break; } if (WlanEnumInterfaces( clientHandle, IntPtr.Zero, out interfaceList) != ERROR_SUCCESS) { yield break; } var interfaceInfoList = new WLAN_INTERFACE_INFO_LIST(interfaceList); Debug.WriteLine("Interface count: {0}", interfaceInfoList.dwNumberOfItems); foreach (var interfaceInfo in interfaceInfoList.InterfaceInfo) { if (WlanGetAvailableNetworkList( clientHandle, interfaceInfo.InterfaceGuid, WLAN_AVAILABLE_NETWORK_INCLUDE_ALL_MANUAL_HIDDEN_PROFILES, IntPtr.Zero, out availableNetworkList) != ERROR_SUCCESS) { continue; } var networkList = new WLAN_AVAILABLE_NETWORK_LIST(availableNetworkList); foreach (var network in networkList.Network) { Debug.WriteLine("Interface: {0}, SSID: {1}, Signal: {2}", interfaceInfo.strInterfaceDescription, network.dot11Ssid, network.wlanSignalQuality); yield return(network.dot11Ssid.ToString()); } } } finally { if (availableNetworkList != IntPtr.Zero) { WlanFreeMemory(availableNetworkList); } if (interfaceList != IntPtr.Zero) { WlanFreeMemory(interfaceList); } if (clientHandle != IntPtr.Zero) { WlanCloseHandle(clientHandle, IntPtr.Zero); } } }
static void Main(string[] args) { const int dwClientVersion = 2; IntPtr clientHandle = IntPtr.Zero; IntPtr pdwNegotiatedVersion = IntPtr.Zero; IntPtr pInterfaceList = IntPtr.Zero; WLAN_INTERFACE_INFO_LIST interfaceList; WLAN_PROFILE_INFO_LIST wifiProfileList; Guid InterfaceGuid; IntPtr pAvailableNetworkList = IntPtr.Zero; string wifiXmlProfile = null; IntPtr wlanAccess = IntPtr.Zero; IntPtr profileList = IntPtr.Zero; string profileName = ""; try { // Open Wifi Handle WlanOpenHandle(dwClientVersion, IntPtr.Zero, out pdwNegotiatedVersion, ref clientHandle); // Find Wi-Fi interface GUID WlanEnumInterfaces(clientHandle, IntPtr.Zero, ref pInterfaceList); interfaceList = new WLAN_INTERFACE_INFO_LIST(pInterfaceList); InterfaceGuid = ((WLAN_INTERFACE_INFO)interfaceList.InterfaceInfo[0]).InterfaceGuid; // Get Wifi Profile WlanGetProfileList(clientHandle, InterfaceGuid, IntPtr.Zero, ref profileList); wifiProfileList = new WLAN_PROFILE_INFO_LIST(profileList); Console.WriteLine(""); Banner(); Console.WriteLine("Found {0} SSIDs: ", wifiProfileList.dwNumberOfItems); Console.WriteLine("============================"); Console.WriteLine(""); for (int i = 0; i < wifiProfileList.dwNumberOfItems; i++) { try { profileName = (wifiProfileList.ProfileInfo[i]).strProfileName; int decryptKey = 63; //https://docs.microsoft.com/en-us/windows/win32/nativewifi/wlan-profileschema-keymaterial-sharedkey-element // Retrieve Wifi SSID Name and Passsword WlanGetProfile(clientHandle, InterfaceGuid, profileName, IntPtr.Zero, out wifiXmlProfile, ref decryptKey, out wlanAccess); XmlDocument xmlProfileXml = new XmlDocument(); xmlProfileXml.LoadXml(wifiXmlProfile); XmlNodeList pathToSSID = xmlProfileXml.SelectNodes("//*[name()='WLANProfile']/*[name()='SSIDConfig']/*[name()='SSID']/*[name()='name']"); XmlNodeList pathToPassword = xmlProfileXml.SelectNodes("//*[name()='WLANProfile']/*[name()='MSM']/*[name()='security']/*[name()='sharedKey']/*[name()='keyMaterial']"); foreach (XmlNode ssid in pathToSSID) { Console.WriteLine("SSID: " + ssid.InnerText); foreach (XmlNode password in pathToPassword) { Console.WriteLine("Password: "******"----------------------------"); } } catch (Exception ex) { Console.WriteLine(ex.Message); } } // Close Wifi Handle WlanCloseHandle(clientHandle, IntPtr.Zero); } catch (Exception e) { Console.WriteLine(e.Message); } }
/// <summary> /// Gets SSIDs of connected wireless LANs. /// </summary> /// <returns>SSIDs</returns> public static IEnumerable<string> GetConnectedNetworkSsids() { var clientHandle = IntPtr.Zero; var interfaceList = IntPtr.Zero; var queryData = IntPtr.Zero; try { uint negotiatedVersion; if (WlanOpenHandle( 2, // Client version for Windows Vista and Windows Server 2008 IntPtr.Zero, out negotiatedVersion, out clientHandle) != ERROR_SUCCESS) yield break; if (WlanEnumInterfaces( clientHandle, IntPtr.Zero, out interfaceList) != ERROR_SUCCESS) yield break; var interfaceInfoList = new WLAN_INTERFACE_INFO_LIST(interfaceList); Debug.WriteLine("Interface count: {0}", interfaceInfoList.dwNumberOfItems); foreach (var interfaceInfo in interfaceInfoList.InterfaceInfo) { uint dataSize; if (WlanQueryInterface( clientHandle, interfaceInfo.InterfaceGuid, WLAN_INTF_OPCODE.wlan_intf_opcode_current_connection, IntPtr.Zero, out dataSize, ref queryData, IntPtr.Zero) != ERROR_SUCCESS) // If not connected to a network, ERROR_INVALID_STATE will be returned. continue; var connection = (WLAN_CONNECTION_ATTRIBUTES)Marshal.PtrToStructure(queryData, typeof(WLAN_CONNECTION_ATTRIBUTES)); if (connection.isState != WLAN_INTERFACE_STATE.wlan_interface_state_connected) continue; var association = connection.wlanAssociationAttributes; Debug.WriteLine("Interface: {0}, SSID: {1}, BSSID: {2}, Signal: {3}", interfaceInfo.strInterfaceDescription, association.dot11Ssid, association.dot11Bssid, association.wlanSignalQuality); yield return association.dot11Ssid.ToString(); } } finally { if (queryData != IntPtr.Zero) WlanFreeMemory(queryData); if (interfaceList != IntPtr.Zero) WlanFreeMemory(interfaceList); if (clientHandle != IntPtr.Zero) WlanCloseHandle(clientHandle, IntPtr.Zero); } }
/// <summary> /// Gets SSIDs of available wireless LANs. /// </summary> /// <returns>SSIDs</returns> public static IEnumerable<string> GetAvailableNetworkSsids() { var clientHandle = IntPtr.Zero; var interfaceList = IntPtr.Zero; var availableNetworkList = IntPtr.Zero; try { uint negotiatedVersion; if (WlanOpenHandle( 2, // Client version for Windows Vista and Windows Server 2008 IntPtr.Zero, out negotiatedVersion, out clientHandle) != ERROR_SUCCESS) yield break; if (WlanEnumInterfaces( clientHandle, IntPtr.Zero, out interfaceList) != ERROR_SUCCESS) yield break; var interfaceInfoList = new WLAN_INTERFACE_INFO_LIST(interfaceList); Debug.WriteLine("Interface count: {0}", interfaceInfoList.dwNumberOfItems); foreach (var interfaceInfo in interfaceInfoList.InterfaceInfo) { if (WlanGetAvailableNetworkList( clientHandle, interfaceInfo.InterfaceGuid, WLAN_AVAILABLE_NETWORK_INCLUDE_ALL_MANUAL_HIDDEN_PROFILES, IntPtr.Zero, out availableNetworkList) != ERROR_SUCCESS) continue; var networkList = new WLAN_AVAILABLE_NETWORK_LIST(availableNetworkList); foreach (var network in networkList.Network) { Debug.WriteLine("Interface: {0}, SSID: {1}, Signal: {2}", interfaceInfo.strInterfaceDescription, network.dot11Ssid, network.wlanSignalQuality); yield return network.dot11Ssid.ToString(); } } } finally { if (availableNetworkList != IntPtr.Zero) WlanFreeMemory(availableNetworkList); if (interfaceList != IntPtr.Zero) WlanFreeMemory(interfaceList); if (clientHandle != IntPtr.Zero) WlanCloseHandle(clientHandle, IntPtr.Zero); } }