QT---Native Wifi functions 应用(WiFi有密码连接)

摘要:
WLAN_配置文件架构元素[xml配置文件写入格式]:WLANProfilenameSSIDConfigSSIDhexnamenonBroadcastconnectionTypeconnectionModeautoSwitchMSMConnectivitypeTypesecurityauthEncryptionauthenticationencryption useOneXFIPSModelsharedKeykeyTypeprotectedkeyMaterialyIndexPMKCacheModePMKCacheTTLPMKCacheSizeproAuthModeAuthThrottleIHOUIHeaderOUItypeconnectivitysecurityuseMSOneXWirelessProfileSamples[无线配置文件例程]BootstrapProfileSampleFIPSProfileSampleNonBroadcastProfileSampleSingleSign-OnProfileSampleWPA Enterprise with PEAP MSCHAPv2Profile SampleWPA企业with TLSProfile Sample个人配置文件SampleWPA2企业with PEAP MSC HAPv2Perfile SampleWPA2 Enterprise with TLSPprofile SampleWPA2个人配置文件sampleWPA2企业例如,普通路由器,安全类型为WPA2-PSK的xml配置文件如下(带密码):˂?
实现功能
    无线网卡列表
    无线热点扫面
    无线连接(有密码,配置文件连接方式)
    无线断开
    重命名本地无线名(两种方式)
    删除无线配置文件
    开启和关闭无线网卡
Native Wifi 简介
    是提供给软件开发者来开发windows 无线管理的一系列API。编程人员可以通过这些函数来进行相关的无线管理,当然我们还可以通过netsh终端命令来管理,这对于非编程人员就可以简单的实现,具体可以查阅相关资料去了解。
    API如下:
无线的连接相关知识
QT---Native Wifi functions 应用(WiFi有密码连接)第1张
QT---Native Wifi functions 应用(WiFi有密码连接)第2张
    从windows的无线网络属性设置窗口来对比,在API编程中,同样有个配置文件来设置这些属性的,那就是profile文件,通过编写xml文件来设置相关属性。
Wireless Profile Samples[无线配置文件例程]
    例如常见的路由器,安全类型为WPA2-PSK的xml配置文件如下(有密码):
    
<?xml version="1.0" encoding="US-ASCII"?>
<WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
    <name>SampleWPA2PSK</name>
    <SSIDConfig>
        <SSID>
            <name>SampleWPA2PSK</name>
        </SSID>
    </SSIDConfig>
    <connectionType>ESS</connectionType>
    <connectionMode>auto</connectionMode>
    <autoSwitch>false</autoSwitch>
    <MSM>
        <security>
            <authEncryption>
                <authentication>WPA2PSK</authentication>
                <encryption>AES</encryption>
                <useOneX>false</useOneX>
            </authEncryption>
<sharedKey>
    <keyType>passPhrase</keyType>
    <protected>false</protected>
    <keyMaterial> <!-- insert key here --> </keyMaterial>
</sharedKey>
        </security>
    </MSM>
</WLANProfile>
    注:
【加密类型设置】
<encryption>AES</encryption>
    【安全类型设置】
<authentication>WPAPSK</authentication>
ValueDescription
openOpen 802.11 authentication.
sharedShared 802.11 authentication.
WPAWPA-Enterprise 802.11 authentication.
WPAPSKWPA-Personal 802.11 authentication.
WPA2WPA2-Enterprise 802.11 authentication.
WPA2PSKWPA2-Personal 802.11 authentication.
具体功能编程实现(QTCtreator 5.xx)
    .pro文件
    LIBS+=$$quote(E:/qt/2015-4-9/WlanGetProfileTest/WlanGetProfileTest/lib/wlanapi.lib)
    LIBS+=$$quote(E:/qt/2015-4-9/WlanGetProfileTest/WlanGetProfileTest/lib/OLE32.lib)
    包含头文件
    #include<windows.h>
    #include<wlanapi.h>
QT---Native Wifi functions 应用(WiFi有密码连接)第3张
[cpp] view plain copy
 
  1. 程序实现(终端打印信息)  
  2. #include<windows.h>  
  3. #include<wlanapi.h>  
  4. #include<string>  
  5. #include<stdio.h>  
  6.   
  7. //无线连接状态  
  8. intlistenStatus()  
  9. {  
  10. HANDLEhClient=NULL;  
  11. DWORDdwMaxClient=2;  
  12. DWORDdwCurVersion=0;  
  13. DWORDdwResult=0;  
  14. intiRet=0;  
  15. WCHARGuidString[39]={0};  
  16. //ListenthestatusoftheAPyouconnected.  
  17. while(1){  
  18. Sleep(5000);  
  19. PWLAN_INTERFACE_INFO_LISTpIfList=NULL;  
  20. PWLAN_INTERFACE_INFOpIfInfo=NULL;  
  21.   
  22. dwResult=WlanOpenHandle(dwMaxClient,NULL,&dwCurVersion,&hClient);  
  23. if(dwResult!=ERROR_SUCCESS){  
  24. wprintf(L"WlanOpenHandlefailedwitherror:%u ",dwResult);  
  25. return1;  
  26. }  
  27. //获取无线网卡列表  
  28. dwResult=WlanEnumInterfaces(hClient,NULL,&pIfList);  
  29. if(dwResult!=ERROR_SUCCESS){  
  30. wprintf(L"WlanEnumInterfacesfailedwitherror:%u ",dwResult);  
  31. return1;  
  32. }else{  
  33. wprintf(L"NumEntries:%lu ",pIfList->dwNumberOfItems);  
  34. wprintf(L"CurrentIndex:%lu ",pIfList->dwIndex);  
  35. inti;  
  36. for(i=0;i<(int)pIfList->dwNumberOfItems;i++){  
  37. pIfInfo=(WLAN_INTERFACE_INFO*)&pIfList->InterfaceInfo[i];  
  38. wprintf(L"InterfaceIndex[%u]: %lu ",i,i);  
  39. iRet=StringFromGUID2(pIfInfo->InterfaceGuid,(LPOLESTR)&GuidString,  
  40. sizeof(GuidString)/sizeof(*GuidString));  
  41. if(iRet==0)  
  42. wprintf(L"StringFromGUID2failed ");  
  43. else{  
  44. wprintf(L"InterfaceGUID[%d]:%S ",i,GuidString);  
  45. }  
  46. wprintf(L"InterfaceDescription[%d]:%S",i,  
  47. pIfInfo->strInterfaceDescription);  
  48. wprintf(L" ");  
  49. wprintf(L"InterfaceState[%d]: ",i);  
  50. switch(pIfInfo->isState){  
  51. casewlan_interface_state_not_ready:  
  52. wprintf(L"Notready ");  
  53. break;  
  54. casewlan_interface_state_connected:  
  55. wprintf(L"Connected ");  
  56. break;  
  57. casewlan_interface_state_ad_hoc_network_formed:  
  58. wprintf(L"Firstnodeinaadhocnetwork ");  
  59. break;  
  60. casewlan_interface_state_disconnecting:  
  61. wprintf(L"Disconnecting ");  
  62. break;  
  63. casewlan_interface_state_disconnected:  
  64. wprintf(L"Notconnected ");  
  65. break;  
  66. casewlan_interface_state_associating:  
  67. wprintf(L"Attemptingtoassociatewithanetwork ");  
  68. break;  
  69. casewlan_interface_state_discovering:  
  70. wprintf(L"Autoconfigurationisdiscoveringsettingsforthenetwork ");  
  71. break;  
  72. casewlan_interface_state_authenticating:  
  73. wprintf(L"Inprocessofauthenticating ");  
  74. break;  
  75. default:  
  76. wprintf(L"Unknownstate%ld ",pIfInfo->isState);  
  77. break;  
  78. }  
  79. }  
  80. }  
  81. }  
  82. }  
  83. intmain()  
  84. {  
  85. HANDLEhClient=NULL;  
  86. DWORDdwMaxClient=2;  
  87. DWORDdwCurVersion=0;  
  88. DWORDdwResult=0;  
  89. PWLAN_INTERFACE_INFO_LISTpIfList=NULL;  
  90. //opensaconnectiontotheserver.  
  91. dwResult=WlanOpenHandle(dwMaxClient,NULL,&dwCurVersion,&hClient);  
  92. if(dwResult!=ERROR_SUCCESS){  
  93. wprintf(L"WlanOpenHandlefailedwitherror:%u ",dwResult);  
  94. return1;  
  95. }  
  96. //enumeratesallofthewirelessLANinterfacescurrentlyenabledonthelocalcomputer.  
  97. dwResult=WlanEnumInterfaces(hClient,NULL,&pIfList);  
  98. if(dwResult!=ERROR_SUCCESS){  
  99. wprintf(L"WlanEnumInterfacesfailedwitherror:%u ",dwResult);  
  100. return1;  
  101. }else{  
  102. //disconnectsaninterfacefromitscurrentnetwork.  
  103. dwResult=WlanDisconnect(hClient,&pIfList->InterfaceInfo[0].InterfaceGuid,NULL);//DISCONNECTFIRST  
  104. if(dwResult!=ERROR_SUCCESS)  
  105. {  
  106. printf("WlanDisconnectfailedwitherror:%lu ",dwResult);  
  107. return-1;  
  108. }  
  109. //retrievethelistofavailablenetworksonawirelessLANinterface.  
  110. PWLAN_AVAILABLE_NETWORK_LISTpWLAN_AVAILABLE_NETWORK_LIST=NULL;  
  111. dwResult=WlanGetAvailableNetworkList(hClient,&pIfList->InterfaceInfo[0].InterfaceGuid,  
  112. 0,  
  113. NULL,&pWLAN_AVAILABLE_NETWORK_LIST);  
  114. if(dwResult!=ERROR_SUCCESS)  
  115. {  
  116. printf("WlanGetAvailableNetworkListfailedwitherror:%lu ",dwResult);  
  117. WlanFreeMemory(pWLAN_AVAILABLE_NETWORK_LIST);  
  118. return-1;  
  119. }  
  120. //connectawlan  
  121. LPCWSTRprofileXml;  
  122. std::wstringstrHead=  
  123. L"<?xmlversion="1.0"encoding="US-ASCII"?>  
  124. <WLANProfilexmlns="http://www.microsoft.com/networking/WLAN/profile/v1">  
  125. <name>SampleWPA2PSK</name>  
  126. <SSIDConfig>  
  127. <SSID>  
  128. <name>CJLU</name>  
  129. </SSID>  
  130. </SSIDConfig>  
  131. <connectionType>ESS</connectionType>  
  132. <connectionMode>auto</connectionMode>  
  133. <autoSwitch>false</autoSwitch>  
  134. <MSM>  
  135. <security>  
  136. <authEncryption>  
  137. <authentication>WPA2PSK</authentication>  
  138. <encryption>AES</encryption>  
  139. <useOneX>false</useOneX>  
  140. </authEncryption>  
  141. <sharedKey>  
  142. <keyType>passPhrase</keyType>  
  143. <protected>false</protected>  
  144. <keyMaterial>5566778899</keyMaterial>  
  145. </sharedKey>  
  146. </security>  
  147. </MSM>  
  148. </WLANProfile>";  
  149. profileXml=strHead.c_str();  
  150. WLAN_REASON_CODEWlanreason;  
  151. //如果<connectionMode>auto</connectionMode>,为自动连接,则下面的一步可以连接上无线  
  152. dwResult=WlanSetProfile(hClient,  
  153. &(pIfList->InterfaceInfo[0].InterfaceGuid),  
  154. 0,profileXml,NULL,TRUE,NULL,&Wlanreason);  
  155. if(ERROR_SUCCESS!=dwResult)  
  156. {  
  157. printf("wlansetprofilefailed%lu. ",dwResult);  
  158. }  
  159. //删除无线配置文件  
  160. /* 
  161. LPCWSTRprofileName; 
  162. LPCWSTRnewProfileName; 
  163. std::wstringstrprofileName=L"SampleWPA2PSK"; 
  164. std::wstringstrNewProfileName=L"test"; 
  165. profileName=strprofileName.c_str(); 
  166. newProfileName=strNewProfileName.c_str(); 
  167. dwResult=WlanDeleteProfile(hClient, 
  168. &(pIfList->InterfaceInfo[0].InterfaceGuid), 
  169. profileName,NULL); 
  170. if(ERROR_SUCCESS!=dwResult) 
  171. printf("wlandeleteprofilefailed%lu. ",dwResult); 
  172. */  
  173. /* 
  174. //重命名无线配置文件,其实只是新建了一个配置文件,并无重命名(更改了wlanapi.h,将此函数换了条件编译位置) 
  175. dwResult=WlanRenameProfile(hClient, 
  176. &(pIfList->InterfaceInfo[0].InterfaceGuid), 
  177. profileName, 
  178. newProfileName, 
  179. NULL 
  180. ); 
  181. if(ERROR_SUCCESS!=dwResult) 
  182. printf("wlanRenameprofilefailed%lu. ",dwResult); 
  183. */  
  184. //网卡关闭和开启(关闭了,就开不了了,除非获取了InterfaceGuid  
  185. //然后可以关闭再开启。用fn+F2手动开启)  
  186. WLAN_PHY_RADIO_STATEstate;  
  187. state.dwPhyIndex=0;  
  188. state.dot11SoftwareRadioState=dot11_radio_state_on;  
  189. PVOIDpData=&state;  
  190. dwResult=WlanSetInterface(hClient,&pIfList->InterfaceInfo[0].InterfaceGuid,  
  191. wlan_intf_opcode_radio_state,sizeof(WLAN_PHY_RADIO_STATE),pData,NULL);  
  192. if(dwResult!=ERROR_SUCCESS)  
  193. {  
  194. wprintf(L"setstatefailed!erris%d ",dwResult);  
  195. }  
  196. }  
  197. dwResult=WlanCloseHandle(hClient,NULL);  
  198. if(dwResult!=ERROR_SUCCESS)  
  199. {  
  200. wprintf(L"WlanCloseHandlefailed%lu. ",dwResult);  
  201. }  
  202. listenStatus();  
  203. if(pIfList!=NULL){  
  204. WlanFreeMemory(pIfList);  
  205. pIfList=NULL;  
  206. }  
  207. return0;  
  208. }  

http://blog.csdn.net/freeape/article/details/45954309

免责声明:文章转载自《QT---Native Wifi functions 应用(WiFi有密码连接)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python程序练习题集梦回还下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ubuntu 16.04 设置位wifi热点 方法(手机可链接)亲测可用

Ubuntu16.04里面可以直接创建热点,而不用像以前的版本,还要其他辅助工具。 具体步骤如下:1. 点击有上角网络标志,点开编辑链接。 2. 选择 WiFi ,添加一个网络。 3.设置这个网络 做如下编辑: 编辑wifi的名字:SSID,  选择 Hotspot (热点)模式. 在 Wifi Security(wifi安全性) 页, 选择 WP...

【移动开发】WIFI热点通信(二)

相信大家在上一篇中已经了解了Android中WIFI热点通信的相关操作知识(http://smallwoniu.blog.51cto.com/3911954/1536126),今天我们将在上一篇代码基础之上进行Socket编程,实现一个简单的多人聊天室功能,以达到热点网络上的通信目的。     首先,我们先来看一张最终效果图: <=======>...

Ubuntu14.04建立WiFi热点

整理自Ubuntu 下建立WiFi热点的方法 Ubuntu14.04 Deepin2014分享WiFi 亲测成功 方法一:network manager 用Ubuntu自带的network manager就可以设置了 第一步: 打开系统的网络设置,打开 网络连接。点击最下面的编辑链接,然后点击右边的添加,添加一个无线网络; 第二步: 在 Wi-Fi 随意...

DD-wrt+Wiwiz搭建私人免费(收费)WiFi认证页面+详细的操作教程

系统需求硬件:已安装了DD-WRT固件的无线路由器注:DD-WRT的Wifidog功能是必须的。所以请选择正确的DD-WRT版本将无线路由器接入Internet。设置并启用无线网络,即使用无线路由器创建一个可用的Access Point。在无线路由器的Web用户界面中SSHD(或Telnet)功能。另外,需要确保:Cron服务已启用Wifidog服务已禁用...

Android wifi 从连接态自动断开的解决办法(dhcp导致)【转】

本文转载自:http://blog.csdn.net/DKBDKBDKB/article/details/38490201 对wifi部分的代码流程已经看了段时间,前两天终于解决了工作中遇到的一个wifi问题,问题描述及解决过程如下: 硬件平台:iMx53 软件平台:Android2.3 bug描述:1,选中热点,输入密码之后,会显示“正在获取ip地址。。...

Python实现自动连接密码本破解wifi

在闲余时间尝试了利用Python实现使用本地无线网卡,自动连接wifi,读取密码本中的密码,迭代尝试密码连接破解wifi,话不多说,代码随上,密码可以从网上下载,也可参考我的密码本: 链接:https://pan.baidu.com/s/1xNEKvurhs6SgdXlCmu_new 提取码:6666 在执行该脚本前,一定要安装pywifi包,--pip...