精华内容
下载资源
问答
  • linux wifi开机自动连接 wifi连接

    千次阅读 2019-08-27 23:58:17
    linux wifi使用 wifi开机自动连接0 引言1 背景2 解决办法3 linux使用wifi模块3.1 wifi模块的选择3.2 安装驱动3.3 wifi连接3.3.1 安装工具3.3.2 启用wifi模块3.3.3 查看可连的wifi3.3.4 连接wifi3.3.5 获取ip地址4 ...

    0 引言

    本博客是关于linux wifi模块的使用(包括设置wifi自动连接),以下都是本人亲身经历和切身感受。此博客秉承以下原则:

    • 没有原理性介绍,我不是这个工具的作者,写了也是抄的。
    • 没有太详细的操作步骤,操作步骤尽量指向官方文档。
    • 没有遇到的或者不值一提的,我都不会写上去。
    作者 Daniel.Leung
    组织 池鱼 - YiiGaa
    邮箱 YiiGaa@126.com
    日期 2019-08-27

    1 背景

    在公司上班时,一般是一个windows的PC作为常用机器,还有一个用于编译和模拟生产环境的ubuntu服务器。决定做自由职业者后,本来可以用docker模拟出一个ubuntu的服务器的,但是奢侈的习惯一旦养成是没法回头的…所以我还是多买了个dell的服务器,然后就悲剧了。

    • 无网线,房间里没有插网口的地方,路由在很远的地方,用的都是wifi。
    • 服务器没有wifi模块,无法联网。

    2 解决办法

    解决办法倒是有三个:

    • 把机器搬到客厅,网线插到路由里,但是家人说放个电脑在那不好看(塑料亲情)…这个方案就完蛋了。
    • 用一个旧的路由做桥接,就是用另外的路由连wifi,然后网线插到这个路由里。成功了,欢喜。但总感觉路由离我这么近辐射很大,然后我晚上就关了。然后就发现这个傻逼TP-Link居然每次断电后都需要重新设置…(也许是我的旧路由固件有点老了)。然后在我设置了第三次后忍无可忍了,有了第三个方案。
    • 给服务器买个usb网卡。让服务器自己连上wifi。搞完是挺好的,但是弄的过程还是比较痛苦的,而且网上找到的资料都比较零散,所以决定写一个教程。

    3 linux使用wifi模块

    3.1 wifi模块的选择

    首先先买一个wifi模块,usb插入的那种。这里选用的标准大概是:

    • 需要支持linux内核的
    • 是否需要安装驱动,傲娇的我选择了需要安装驱动的,因为不需要安装驱动的需要80多…
    • 是否需要支持5G,我这里选择了支持5G的,因为家里的无线设备比较多,只用2.4G的话肯定会有冲突。不过前提是有5G的wifi网络。
      最后我选择了,COMFAST CF-811AC,一个需要安装驱动,支持linux内核,支持5G的usb网卡。挺小的,跟无线鼠标的接收器一样大,40多块钱。

    在大学的时候,当时也做过一个usb的wifi网卡,当时零件都是蹭实验室的,就没怎么花钱,但是那个网个网卡从硬件到驱动做了差不多一个月,其实就是闲的…那时候就是对嵌入式痴迷了,都总感觉自己要无敌了,什么都想做,做了过飞行器,声控遥控车。回忆起来好青葱的岁月。题外话,题外话…

    3.2 安装驱动

    如果买了不需要安装驱动的,这一个跳过,但是安个驱动真的值40块钱么…
    跟网卡一起包装的还有一个光盘,庆幸了一下自己的服务器有光驱,但是插入光盘,脸都绿了,里面居然自由Mac和windows的驱动,为什么么有linux的…
    在官网想下载,更悲剧的是,官网上就自由windows的驱动。

    本着不给我解决我就退货的态度找了淘宝店家,店家提供了一个适合我机器内核的驱动。然后按照店家说的步骤安装就行。无非就是make一下代码,make install一下,但我记得当时驱动代码在make的时候报了错,好像gcc的版本问题,我是自己把它的代码改了。如果不知道的话,也可以找店家解决,方正不解决就退货,不能退就一万字差评。

    3.3 wifi连接

    进入正题,wifi模块的使用

    3.3.1 安装工具

    需要安装以下的包,所以在用无线之前,还是需要先用有线网的,下面的软件也可以在后面的命令中按照错误提示安装。

    • iw
    • wpa_supplicant
    • udhcpc

    3.3.2 启用wifi模块

    默认情况下,wifi模块是不启用的,即执行ifconfig时没有wifi网卡
    在这里插入图片描述
    这时候,输入命令ifconfig -a即会显示没启用的无线网卡,如果还是没有,就是驱动没安好,或者安装好了没重启。
    在这里插入图片描述
    上面截图中的wlx200db033b7fa就是这个无线网卡。
    启动无线网卡命令:

    sudo ip link set 网卡 up
    

    上面的命令中网卡为上面ifconfig -a中查到的无线网卡标识,我这里是ip link set wlx200db033b7fa up,下面一样,后面不做重复
    启动后,再看用ifconfig,无线网卡就能查到了,说明现在网卡就是启动的

    3.3.3 查看可连的wifi

    sudo iw 网卡 scan | grep SSID
    

    在这里插入图片描述
    SSID:后面的就是wifi名字

    3.3.4 连接wifi

    先建立一个conf文件,放在哪里都行,能访问就可以,我习惯把配置文件都放在/home/user(这里是你的用户)/init/下

    我这里起名是account_setting.conf,文件内容是

    ctrl_interface=/var/run/wpa_supplicant
    network={
            ssid="lalala"
            psk="00005419"
    
    }
    

    这里ctrl_interface后面的值不需要动。反正我机器上这个路径也不存在,但是好使…
    ssid的值替换成你的wifi名,尽量不要有中文和奇奇怪怪的符号,不知道到时候解析有没有问题,psk是密码。这里的配置是普通的wifi密码配置,如果是其他奇怪的加密方式,那就要看查一下wpa_supplicant配置的相关规则了。

    配置好了之后,输入命令

    sudo wpa_supplicant -B -c 配置文件位置 -i 网卡
    

    配置文件位置是上面account_setting.conf的绝对路径。
    在这里插入图片描述

    3.3.5 获取ip地址

    连接上wifi后还不能上网,需要获取ip地址

    sudo udhcpc -b -i 网卡
    

    在这里插入图片描述
    获取成功后,ifconfig查看以下网卡是否有ip了,或者日常的ping一下百度,ping成功了就是能上网了。
    在这里插入图片描述
    这里的获取ip方法,每次获取都是一样的,只要路由的ip个数足够。也有每次不一样的方式,用dhclient 网卡这个命令就行。这里可能有些网络是需要固定ip才能上网的,这里我没用到,所以如果需要的话,靠你自己了…

    4 开机自动连接wifi

    上面的内容,已经可以连接wifi了,但是比较扯的是,需要每次开机都手动连接(可能有图形界面的不用,但是有图形界面的话上面的连接也不用一顿操作了)。所以需要做一个脚本驱动开机自动启动。

    4.1 文件夹准备

    准备一个文件夹,4.2和4.3文件需要放在同一个文件夹里,如果不在一起,那你需要自己改4.3的脚本了。

    4.2 wifi账号密码配置文件准备

    上面3.3.4 连接wifi提到过,上面做了这里跳过
    创建account_setting.conf文件,内容

    ctrl_interface=/var/run/wpa_supplicant
    network={
            ssid="lalala"
            psk="00005419"
    
    }
    

    这里ctrl_interface后面的值不需要动。反正我机器上这个路径也不存在,但是好使…
    ssid的值替换成你的wifi名,尽量不要有中文和奇奇怪怪的符号,不知道到时候解析有没有问题,psk是密码。这里的配置是普通的wifi密码配置,如果是其他奇怪的加密方式,那就要看查一下wpa_supplicant配置的相关规则了。

    4.3 脚本准备

    创建bootstrapping.sh文件,内容

    #!/bin/bash
    wifiname='网卡'
    accountsetting='account_setting.conf'
    
    ip link set $wifiname up&&
    wpa_supplicant -B -c $(dirname $0)/$accountsetting -i $wifiname &&
    udhcpc -b -i $wifiname
    

    上面的网卡需要替换成你的网卡标识,account_setting.conf为wifi配置文件名。

    4.4 修改权限

    chmod 755 这两个文件
    

    这里防止开机启动时由于权限不足而无法启动脚本。

    4.5 开机启动配置

    以下以ubuntu为例子
    在/etc/rc.local文件(其他系统都有这个开机启动的配置文件)追加我们的脚本
    在这里插入图片描述
    /home/daniel-leung/init/wificonf/bootstrapping.sh4.3 脚本准备的脚本路径,一定要写在exit 0之前。

    5 后记

    这个我wifi连接居然弄了半天,不过估计用的机会很少,一是一般都喜欢用有图形的系统,二是一般无图形的服务器系统都是有网线的。
    站在巨人肩膀上还是有必要的,所以以后能安图形界面还是要安一个。

    展开全文
  • 过放荡不羁的生活,容易得像顺水推舟,但是要结识良朋益友,却难如登天。——巴尔扎克 本文demo来自网络,找了好久找到的,后面自己做了些许修改,...1.当前wifi连接信息 2.开关wifi(自动连接已经配置过的wifi) 3.W

    过放荡不羁的生活,容易得像顺水推舟,但是要结识良朋益友,却难如登天。—— 巴尔扎克

    本文demo来自网络,找了好久找到的,后面自己做了些许修改,这里对源码解析,愧于忘记哪里出来了,感谢作者!

    接下来就记录一下wifi开发的一些学习心得,这边先看几张效果图吧!

        

    本文大纲:

    1. 当前wifi连接信息

    2. 开关wifi(自动连接已经配置过的wifi)

    3. Wifi扫描,选择要连接的wifi,使用密码连接

    内容:

    1. 当前wifi连接信息

    首先先加入这个demo用到的几个权限

        <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" >
        </uses-permission>
        <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >
        </uses-permission>
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
        </uses-permission>
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >
        </uses-permission>

    Wifi相关操作这里demo创建了WifiAdmin这个类,作为业务类,这里首先我们要获取当前wifi的状态

    获取wifi连接状态使用:int android.net.wifi.WifiManager.getWifiState()

    Wifi状态有:

     WIFI_STATE_DISABLED   wifi已关闭

     WIFI_STATE_DISABLING  wifi正在关闭

     WIFI_STATE_ENABLED    wifi已连接

     WIFI_STATE_ENABLING   wifi正在连接

     WIFI_STATE_UNKNOWN  wifi未知状态

    获取当前wifi的连接信息使用:

    WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
    WifiInfo wifiInfo = wifiManager.getConnectionInfo();

    打印wifiInfo主要方法的信息:

     

    wifiInfo.getBSSID()  得到无线的Mac地址

    wifiInfo.getHiddenSSID()  未知(true if this network does not broadcast its SSID, so an  SSID-specific probe request must be used for scans.)

    wifiInfo.getIpAddress()  int类型ip地址,需要转成String

    wifiInfo.getLinkSpeed()  连接速度,单位Mbps

    wifiInfo.getNetworkId()  网络标识id(wifi名称改掉,会跟着变)

    wifiInfo.getRssi()  当前无线网络的信号强度指示器

    wifiInfo.getSSID()  当前无线网络的名称

    wifiInfo.describeContents()  未知

    注:

    Int类型ip转String类型ip代码:

    public String ipIntToString(int ip) {
    try {
    byte[] bytes = new byte[4];
    bytes[0] = (byte) (0xff & ip);
    bytes[1] = (byte) ((0xff00 & ip) >> 8);
    bytes[2] = (byte) ((0xff0000 & ip) >> 16);
    bytes[3] = (byte) ((0xff000000 & ip) >> 24);
    return Inet4Address.getByAddress(bytes).getHostAddress();
    } catch (Exception e) {
    return "";
    }
    }

    2.  开关wifi

    打开关闭wifi使用wifiManager.setWifiEnabled()的方法,打开关闭前,先要判断wifi的状态,使用isWifiEnabled()方法。

    打开wifi :

    /**
     * 打开wifi功能
     * 
     * @return true or false
     */
    public boolean OpenWifi() {
    boolean bRet = true;
    if (!wifiManager.isWifiEnabled()) {
    bRet = wifiManager.setWifiEnabled(true);
    }
    return bRet;
    }

    关闭wifi :

    /**
     * 关闭wifi
     * 
     * @return
     */
    public boolean closeWifi() {
    if (!wifiManager.isWifiEnabled()) {
    return true;
    } else {
    return wifiManager.setWifiEnabled(false);
    }
    }

    注:开关wifi,系统会自动识别保存过密码的wifi去连接

    3.  Wifi扫描,选择要连接的wifi,使用密码连接

    Wifi扫描结果的列表使用List<ScanResult> 保存

    扫描步骤:

    wifiManager.startScan(); //开启扫描

    scanResultList = wifiManager.getScanResults(); // 扫描返回结果列表

    打印一个ScanResult的数据

     

    数据说明:

    ScanResult:

    BSSID:fc:e3:3c:4e:f0:34

    capabilities:[WPA-PSK-TKIP][ESS]   加密方案

    frequency:2412

    level:-48                                                 信号的强弱标志(单位dBm分贝毫伏)

    SSID:ChinaNet-kgdp                          wifi名称

    timestamp:238673772811

    describeContents():0

    level根据数值可以分为5个等级的信号强弱:

    Level>-50           信号最强4格

    -50<Level<-65  信号3格

    -65<Level<-75  信号2格

    -75<Level<-90  信号1格

    -90<Level          信号0格

    Ps: 也可以做更细的划分

    选择wifi进行连接,这里分为连接已经配置过的wifi以及未配置过的wifi

    A.连接已经配置过wifi

    检查是否已经配置过该wifi,通过WifiManager获取已经配置的wifi列表

    List<WifiConfiguration> existingConfigs = wifiManager.getConfiguredNetworks();

    传入要连接的wifi的SSID(即wifi名称,匹配得到则不用输入密码即可连接,匹配不到则要输入密码才能连接)

    这里需要注意的是:WifiConfiguration里封装的wifi的SSID是包含双引号的,而ScanResult的SSID是不包含双引号的,这里进行遍历比较时需要注意!

    对于连接已经配置过的wifi,这里遍历的结果返回一个WifiConfiguration的对象,拿来实现连接;另外这里的wifiManager已经存在了要连接的wifi的networkId,所以不用重新调用wifiManager的addNetwork方法,代码如下:

    /**
     * 已有配置链接
     * 
     * @param wf
     * @return
     */
    public boolean Connect(WifiConfiguration wf) {
    if (!this.OpenWifi()) {
    return false;
    }
    // 状态变成WIFI_STATE_ENABLED的时候才能执行下面的语句,即当状态为WIFI_STATE_ENABLING时,让程序在while里面跑
    while (wifiManager.getWifiState() == WifiManager.WIFI_STATE_ENABLING) {
    try {
    // 为了避免程序一直while循环,让它睡个100毫秒在检测……
    Thread.currentThread();
    Thread.sleep(100);
    } catch (InterruptedException ie) {
    }
    }
    boolean bRet = wifiManager.enableNetwork(wf.networkId, true);
    wifiManager.saveConfiguration();
    return bRet;
    }

    B.连接未配置的wifi

    输入密码,根据密码创建一个配置信息类

    WifiConfiguration wifiConfig = this.CreateWifiInfo(SSID, Password, Type);

    注:这里的type是wifi的加密类型,加密类型查看源码有

    	/**
    	 * 加密类型
    	 * 
    	 * @author Administrator
    	 * 
    	 */
    	public enum WifiCipherType {
    		WIFICIPHER_WEP, WIFICIPHER_WPA, WIFICIPHER_NOPASS, WIFICIPHER_INVALID
    	}


    一般使用WIFICIPHER_WPA这种加密方式,还有web以及无密码的方式。

    然后调用addNetwork把配置信息加入WifiManager(这里返回networkId ),加入后默认是DISABLED(即断开状态的),还要再调用WifiManager.enableNetwork(int netId, boolean disableOthers)去启用,这里传入参数addNetwork方法返回的networkId ,就能启动连接了,布尔值传入true,关闭别的网络,代码:

    /**
     * 无配置记录链接方式
     * 
     * @param SSID
     * @param Password
     * @param Type
     * @return true or false
     */
    public boolean Connect(String SSID, String Password, WifiCipherType Type) {
    if (!this.OpenWifi()) {
    return false;
    }
    // 状态变成WIFI_STATE_ENABLED的时候才能执行下面的语句
    while (wifiManager.getWifiState() == WifiManager.WIFI_STATE_ENABLING) {
    try {
    // 为了避免程序一直while循环,让它睡个100毫秒在检测……
    Thread.currentThread();
    Thread.sleep(100);
    } catch (InterruptedException ie) {
    }
    }
     
    WifiConfiguration wifiConfig = this
    .CreateWifiInfo(SSID, Password, Type);
    int netID = wifiManager.addNetwork(wifiConfig);
    boolean bRet = wifiManager.enableNetwork(netID, true);
    wifiManager.saveConfiguration();
    return bRet;
    }


    源码点击下载

    欢迎关注我的公众号,获取更多开发相关文章!

    您的关注是对我最大的鼓励!

    展开全文
  • VC++wifi连接(附源码)

    万次阅读 多人点赞 2020-10-24 11:22:02
    第2章:VC++wifi连接增强版 源代码demo已上传到百度网盘:永久生效 代码通过 WLAN的接口,采用profile的方式,支持有密码与无密码的连接 ,关键是在于怎么设置好这个profile 参数 BOOL CwifiDlg::ConnectWanByWpa...

    VC++开发常用功能一系列文章 (欢迎订阅,持续更新…)
    第33章:VC++wifi连接增强版
    源代码demo已上传到百度网盘:永久生效

    1. 代码通过 WLAN的接口,采用profile的方式,支持有密码与无密码的连接 ,关键是在于怎么设置好这个profile 参数
    BOOL  CwifiDlg::ConnectWanByWpa(CString strssid, CString strpassword)
    {
    	// TODO: Add your control notification handler code here
    
    	CLogHelp::ITCLog("start wifi connect !");
    	USES_CONVERSION;
    	HANDLE hClient = NULL;
    	DWORD dwMaxClient = 2;   //    
    	DWORD dwCurVersion = 0;
    	DWORD dwResult = 0;
    
    	CString strerr, strXml, str;
    	PWLAN_INTERFACE_INFO_LIST pIfList = NULL;
    	PWLAN_INTERFACE_INFO pIfInfo = NULL;
    
    	dwResult = WlanOpenHandle(dwMaxClient, NULL, &dwCurVersion, &hClient);
    	if (dwResult != ERROR_SUCCESS) {
    
    		strerr.Format(_T("WlanOpenHandle failed with error: %u"), dwResult);
    		CLogHelp::ITCLog(strerr.GetString());
    		//MessageBox(strerr);
    		return FALSE;
    	}
    
    	dwResult = WlanEnumInterfaces(hClient, NULL, &pIfList);
    	if (dwResult != ERROR_SUCCESS) {
    		strerr.Format(_T("WlanEnumInterfaces failed with error: %u"), dwResult);
    		CLogHelp::ITCLog(strerr.GetString());
    		//	MessageBox(strerr);
    		return FALSE;
    	}
    	else {
    		if (pIfList)
    		{
    			//for (int i = 0; i < pIfList->dwNumberOfItems; i++)
    			//{
    			//	WlanDisconnect(hClient, &pIfList->InterfaceInfo[i].InterfaceGuid, NULL);
    			//}
    		}
    
    
    		WLAN_CONNECTION_PARAMETERS wlanConnPara;
    
    		pIfInfo = (WLAN_INTERFACE_INFO *)&pIfList->InterfaceInfo[i];
    
    		CString strendstr;
    
    		CString stringssid_name;
    		CString strhexssid;
    		CString strpassword_;
    
    		CString strHead = _T("<?xml version=\"1.0\"?>\
    			<WLANProfile xmlns =\"http://www.microsoft.com/networking/WLAN/profile/v1\">\n");
    
    		strendstr = strHead;
    
    		stringssid_name.Format("<name>%s</name> \n", strssid);
    
    
    		strendstr += stringssid_name;
    		strssid.TrimLeft();
    		strssid.TrimRight();
    		CString tempstr = ConvertCStringoHex_ASCII(strssid);
    
    		strhexssid.Format("<hex>%s</hex> \n", tempstr);
    		strpassword_.Format("<keyMaterial>%s</keyMaterial>\n", strpassword);
    
    		CString SSIDConfig = _T("<SSIDConfig>\
    			<SSID> \n");
    
    		strendstr += SSIDConfig;
    
    		strendstr += strhexssid;
    		strendstr += stringssid_name;
    
    		CString SSIDConfigend = _T("</SSID>\
    			</SSIDConfig>\
    			<connectionType>ESS</connectionType>\
    			<connectionMode>auto</connectionMode>\
    			<MSM>\
    			<security>\
    			<authEncryption>\
    			<authentication>WPA2PSK</authentication>\
    			<encryption>AES</encryption>\
    			<useOneX>false</useOneX>\
    			</authEncryption>\
    			<sharedKey>\
    			<keyType>passPhrase</keyType>\
    			<protected>false</protected> \n");
    
    		strendstr += SSIDConfigend;
    		strendstr += strpassword_;
    		CString Allend = _T("</sharedKey>\
    			</security>\
    			</MSM>\
    			<MacRandomization xmlns = \"http://www.microsoft.com/networking/WLAN/profile/v3\">\
    			<enableRandomization>false</enableRandomization>\
    			<randomizationSeed>225913126</randomizationSeed>\
    			</MacRandomization>\
    			</WLANProfile>");
    
    		strendstr += Allend;
    
    		/*CString strHead = _T("<?xml version=\"1.0\"?>\
    			<WLANProfile xmlns =\"http://www.microsoft.com/networking/WLAN/profile/v1\">\
    			<name>ITC_research division 5G</name>\
    			<SSIDConfig>\
    			<SSID>\
    			<hex>4954435F7265736561726368206469766973696F6E203547</hex>\
    			<name>ITC_research division 5G</name>\
    			</SSID>\
    			</SSIDConfig>\
    			<connectionType>ESS</connectionType>\
    			<connectionMode>auto</connectionMode>\
    			<MSM>\
    			<security>\
    			<authEncryption>\
    			<authentication>WPA2PSK</authentication>\
    			<encryption>AES</encryption>\
    			<useOneX>false</useOneX>\
    			</authEncryption>\
    			<sharedKey>\
    			<keyType>passPhrase</keyType>\
    			<protected>false</protected>\
    			<keyMaterial>szsitckj</keyMaterial>\
    			</sharedKey>\
    			</security>\
    			</MSM>\
    			<MacRandomization xmlns = \"http://www.microsoft.com/networking/WLAN/profile/v3\">\
    			<enableRandomization>false</enableRandomization>\
    			</MacRandomization>\
    			</WLANProfile>");*/
    			//	< keyMaterial>01000000D08C9DDF0115D1118C7A00C04FC297EB01000000325FE47AD994ED43819E6B0ABB843A16000000000200000000001066000000010000200000006DA0DA8729F66804FA49FECB89C79BD4C26252B7D468966D1525C18B229625B7000000000E8000000002000020000000F989280387559CA51697C5B1E2C52BF7875AD12C707C9BC0CB5DBB1940D5176810000000432FEA51FEE12C7881C439303BA5DA3E400000009259CB7A86A1F015B72B60F4F7F6914693400AD86F1BD0127D3F014178C6405011493D85A7F1EC356F19707A30F64D1AD91CBC36346A4A8F7B3843B82DB6534E< / keyMaterial>
    		WCHAR strFile[4096] = { 0 }; //sizeof(strSsid)/sizeof(WCHAR)
    		ULONG   blenth, j;
    		strHead = strendstr;
    
    		 /*strHead = _T("<?xml version=\"1.0\"?>\
    	<WLANProfile xmlns =\"http://www.microsoft.com/networking/WLAN/profile/v1\">\
    	<name>ITC</name>\
    	<SSIDConfig>\
    	<SSID>\
    	<hex>495443</hex>\
    	<name>ITC</name>\
    	</SSID>\
    	</SSIDConfig>\
    	<connectionType>ESS</connectionType>\
    	<connectionMode>auto</connectionMode>\
    	<MSM>\
    	<security>\
    	<authEncryption>\
    	<authentication>WPA2PSK</authentication>\
    	<encryption>AES</encryption>\
    	<useOneX>false</useOneX>\
    	</authEncryption>\
    	<sharedKey>\
    	<keyType>passPhrase</keyType>\
    	<protected>true</protected>\
    	<keyMaterial>01000000D08C9DDF0115D1118C7A00C04FC297EB01000000211371DEB3F5BA4E9CB3C97B16865FCC0000000002000000000010660000000100002000000004AAAF08F298621D7163B71BC317D761C308B741CEC20DFB88803B5DF01CDC99000000000E80000000020000200000004FF82749C3AE9DF0AD90D202FCAC7913495D3A69184298CB2AA6E35BEF7479161000000059759AFAF1E225D6B7FAE847FF4018C84000000055EB23C035415DAF9A47CE7E8503914F481D0FDAA433256A04D09FD8148DBA1A7023AE59501425E89411C96D1EBC817F00D795F18DD3B9A454BE90E4807B30A2</keyMaterial>\
    	</sharedKey>\
    	</security>\
    	</MSM>\
    	<MacRandomization xmlns = \"http://www.microsoft.com/networking/WLAN/profile/v3\">\
    	<enableRandomization>false</enableRandomization>\
    	<randomizationSeed>225913126</randomizationSeed>\
    	</MacRandomization>\
    	</WLANProfile>");*/
    		blenth = strHead.GetLength();
    		for (j = 0; j < blenth; j++)
    		{
    			mbtowc(&strFile[j], (const char *)(LPCTSTR)strHead.Left(1), 1);
    			strHead = strHead.Right(strHead.GetLength() - 1);
    		}
    		strFile[blenth] = '\0';
    
    
    		WLAN_REASON_CODE Wlanreason;
    
    		dwResult = WlanSetProfile(hClient, &pIfInfo->InterfaceGuid, 0, strFile, NULL, TRUE, NULL, &Wlanreason);
    
    
    		if (dwResult == ERROR_SUCCESS)
    		{
    			//MessageBox(_T("配置加密Profile成功"));
    			strerr = _T("配置加密Profile成功");
    			CLogHelp::ITCLog(strerr.GetString());
    		}
    		else
    		{
    			CString strErr;
    			strErr.Format(_T("Wifi 配置加密Profile失败,%u"), Wlanreason);
    			CLogHelp::ITCLog(strErr.GetString());
    
    			WlanCloseHandle(hClient, NULL);
    			//	Sleep(1000);
    			if (pIfList != NULL) {
    				WlanFreeMemory(pIfList);
    				pIfList = NULL;
    			}
    			//MessageBox(strErr);
    			return FALSE;
    		}
    
    		wlanConnPara.wlanConnectionMode = wlan_connection_mode_profile;
    		// set the profile name
    		wlanConnPara.strProfile = A2W(strssid);
    		// set the SSID
    		CString strsss;
    		//m_cmdListSSID.GetWindowText(strsss);
    		strsss = strssid;
    		DOT11_SSID Ssidud = { 0 };
    		string strSsid;
    		strSsid = CStringA(strsss);
    		Ssidud.uSSIDLength = (ULONG)strSsid.size();
    		memcpy(&Ssidud.ucSSID, strSsid.c_str(), strSsid.size());
    
    		wlanConnPara.pDot11Ssid = &Ssidud;
    		wlanConnPara.dot11BssType = dot11_BSS_type_any;
    		// the desired BSSID list is empty
    		wlanConnPara.pDesiredBssidList = NULL;
    		// no connection flags
    		wlanConnPara.dwFlags = 0;
    		dwResult = WlanConnect(hClient, &pIfInfo->InterfaceGuid, &wlanConnPara, NULL);
    		if (dwResult == ERROR_SUCCESS)
    		{
    			//MessageBox(_T("WlanConnect设置成功"));
    
    			CLogHelp::ITCLog("WlanConnect设置成功");
    		}
    		else
    		{
    			CLogHelp::ITCLog("WlanConnect设置参数失败!");
    			WlanCloseHandle(hClient, NULL);
    			//	Sleep(1000);
    			if (pIfList != NULL) {
    				WlanFreeMemory(pIfList);
    				pIfList = NULL;
    			}
    
    			//AfxMessageBox("wifi无法连接,可能帐号或密码错误!");
    			return FALSE;
    		}
    	}
    
    	//DisOrConnect();
    	if (bfirstCheckTime)
    	{
    		bfirstCheckTime = FALSE;
    		SetTimer(TIME_ISCONNECT_1, 3000, NULL);
    	}
    	else
    	{
    		SetTimer(TIME_ISCONNECT_1, 2500, NULL);
    	}
    
    	WlanCloseHandle(hClient, NULL);
    	//	Sleep(1000);
    	if (pIfList != NULL) {
    		WlanFreeMemory(pIfList);
    		pIfList = NULL;
    	}
    	return TRUE;
    }
    

    QQMail: 88520350@qq.com

    Webchat: keivin

    展开全文
  • Android 8.0 wifi连接流程

    千次阅读 2018-06-17 12:29:55
    Android 8.0 wifi连接流程 8.0 wifi的连接过程如下:

    Android 8.0 wifi连接流程

    wifi整体的framework改动还是挺大的,
    WifiStateMachine就改动了,如下。后续再把各版本的变化贴出来
    这里写图片描述

    8.0 wifi的连接过程如下:
    这里写图片描述

    展开全文
  • WIFI连接每次都需要将配置信息保存到手机,ROOT后的手机能查看连接过WIfi的密码,求大神给出连接WIFI后,去手机配置信息里查看不到保存的WIFI密码。
  • WiFi连接adb

    千次阅读 2014-09-21 00:11:19
    WiFi连接adb
  • Wifi连接热点

    千次阅读 2015-12-22 18:54:59
    Wifi连接这一块,网上的资料通常是讲调用WifiManager的两个公开函数: /** * Reconnect to the currently active access point, if we are currently * disconnected. This may result in the asynchronous ...
  • 7.1系统8.0系统,Wifi连接后,显示wifi已连接但无法访问网络。 原因: 连接wifi后,会访问google服务器,由于国内访问不了,所以会显示“wifi已连接,但无法访问网络”,其实是可以上网的。 修改有两种方法...
  • 利用Wifidog实现微信wifi连接

    万次阅读 2017-02-09 08:13:59
    这就是利用微信身份来进行wifi连接认证,主要目的是商家为了吸引顾客,推广其公众号。别的也不多说,下面就来讲一讲怎么实现这样的wifi认证方式。 本篇文章要讲的是portal型路由设备(具体就是OpenWrt路由)的改造...
  • android wifi连接与断开

    千次阅读 2015-10-07 17:52:56
    android 实现wifi连接与断开 可以完全代替系统设置的wifi管理功能,搜索wifi按照信号强度排序,button刷新,记住密码等功能
  • 手机wifi连接打印机之后,实现打印功能。求这方面的框架或者源码
  • adb wifi连接多个设备

    千次阅读 2019-09-23 17:53:04
    #adb wifi连接多个设备 还没有wifi连接的设备时 1.将手机和电脑连接在一个wifi下 2.查看手机IP地址 adb -s [设备] shell ifconfig wlan0 inet addr就是手机的ip地址 3.adb tcpip 5555 这个命令会以后面的端口号...
  • wifi连接过程抓包

    千次阅读 2019-09-11 11:33:47
    下面是一次wifi连接过程发送数据的抓包,有些包没抓到,但还是比较全的。 1~4包,探测请求、响应过程 STA发出探测请求包Probe Req AP做出回应,发出探测响应包Probe Rsp 5~7包,链路认证请求、响应过程...
  • 电脑开机之后找不到WiFi,也就是网络连接中WiFi连接选项突然消失的现象我已经遇到了好几次,甚至有一次上网上到一半突然就断了,发现WiFi连接选项消失了。这种情况重启一下电脑通常就能恢复,但问题其实只是无线网卡...
  • PC通过WIFI连接Android设备,使用ADB

    万次阅读 2017-08-10 19:44:04
    使用WiFi连接Android设备 1 前置条件 2 打开Android设备的连接服务 如果开启了adbd1. 场景一些Android设备我们无法直接通过USB去连接,就需要使用到WiFi来连接。然后就可以使用adb想设备命令了。2. 使用WiFi连接...
  • ESP32之WIFI连接方式一

    千次阅读 2020-09-18 22:04:43
    ESP32之WIFI连接方式一 本文主要讲的是esp32的wifi配置为sta模式,通过menuconfig的配置路由器信息形式,连接路由器。本次是在ESP-IDF下的esp-idf\examples\wifi\getting_started\station程序进程讲述。 app_main...
  • iMazing出现WiFi连接故障问题

    千次阅读 2018-12-19 11:25:24
    iOS设备和iMazing(http://www.imazing.cc/)之间的WiFi连接取决于Apple的 Bonjour服务。在解决连接问题时,请首先确保没有安全软件阻止Bonjour ,请参阅本文后面 的相关部分。 下载iMazing...
  • 去项目客户处出差一段时间,连接客户办公室WiFi,客户用没问题,我的电脑一连接就是感叹号。 捣鼓半天,问题解决,更改wifi连接属性中的安全类型和加密类型为如下形式: ...
  • android studio 通过wifi连接手机调试

    万次阅读 2017-03-22 16:23:23
    as 通过wifi连接手机调试
  • centos7使用无线wifi连接

    千次阅读 2018-11-17 20:09:04
    centos7使用无线wifi连接 一:所用命令 dmesg | grep firmware(看看有没有来自无线网卡的固件请求) iw: iw dev(查找无线网卡口) iw wls1 link(查看wls1网口无线网络连接情况) iw wls1 scan | grep SSID(查看...
  • 使用nmcli命令配置WiFi连接 目前各大Linux发行版通常都用NetworkManager来管理网络,对应的命令行工具是nmcli,可以很便捷地对网络进行配置。 以Ubuntu 20.04为例,使用nmcli新建一个WiFi连接的命令如下: 新建wifi ...
  • 电脑显示wifi连接但是不能上网 1.使用手机等其它设备,连接同一个wifi,检查是否出现问题 如果其它设备也不能使用,则为网络本身的问题 如果不是,在继续检查电脑的问题 2.诊断问题 打开 “网络和Internet设置”找到...
  • linux 下判断wifi连接状态的代码

    千次阅读 2019-05-23 11:49:08
    查看wifi连接状态,有时候wifi断开连接了但是我们不知道,以至于不能重新连接上wifi,这时候我们需要一个判断来知道wifi时候断开了,下面这段代码就是来检测wifi连接状态的,代码非常简单 /*******************...
  • 关于网友提出的“Android 如何获取所有的wifi连接历史记录?”问题疑问,本网通过在网上对“Android 如何获取所有的wifi连接历史记录?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:问题:...
  • 抓包wifi连接四次握手流程

    千次阅读 2019-10-18 16:19:42
    心血来潮,想看下wifi连接的四次握手流程是如何的,分享一下: 路由设置成WPA2-Personal认证方式, AES加密方式,抓包如下: EAPOL M1包: EAPOL M2包: EAPOL M3包: EAPOL M4包: ...
  • 想知道安卓wifi开发中,怎么知道wifi连接失败是因为密码错误导致的,本人是初学者,谢谢大家了!
  • 两部安卓手机通过Wifi连接,通过socket通信,Wifi由路由器发出,但socket的IP地址写的是路由器的地址根本无法实现通信,是哪里有错吗??
  • wifi连接过程

    千次阅读 2019-02-27 09:24:58
    wifi sta 连接 ap的信令交互过程如下:(DISABLED Security Type) AP-------------->broadcast beacon /** STA Select AP **/ STA ------------> Probe Request ----------------> AP //广播自身数据 ...
  • WiFi连接的时候何不知道如判断验证失败的方法,根据网上的资料找到方法接收广播 if (action.equals(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION)) { LogLazy.e("wifi密码错误广播"); int linkWifiResult = ...
  • 使用终端模拟器通过wifi连接eclipse

    千次阅读 2016-05-21 15:04:53
    使用终端模拟器通过wifi连接eclipse打开手机wifi连接到网络。使用已经拥有root权限的手机,下载终端模拟器,打开。 输入以下命令 su setprop service.adb.tcp.port 5555 stop adbd start adbd点开wifi连接详情查看ip...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 131,227
精华内容 52,490
关键字:

wifi连接