如果你已具备:


1、后台语言PHP或Node.js的知识
2、笔记本或树莓派或PC
3、windows或Linux系统
4、PHP或Node.js的开发环境
5、HTML等web前端知识
6、以上五点都是废话,简单来说是已具备C/S前后端开发的实力和一台用来开发的电脑



如果你不具备:


1、windows或Linux客户端编程
2、bat或shell命令使用方式
3、无线网卡
4、浏览器
5、以上四点都是废话,简单来说是不会桌面应用开发和没有连wifi的无线网卡



如果你有这样的一个需求:


1、写一个网页
2、在网页上连接wifi而非用鼠标在任务栏上点击连接
3、这个网页只是本地使用
4、以上三点都是废话,简单来说就是需要制作一个单机网页并在网页上输入帐号密码来连接wifi



看到这样的需求,你的脑子是不是开始运转起来去思考这个需求的解决方案。可能你跟我的思路一样:


首先,连接wifi是系统做的事情,肯定不能使用JavaScript这种在浏览器上运行的语言来调用系统的功能,就算是chrome这样强大浏览器也不会具备连接wifi的API;


然后,得知JS败下阵来,就到Node.js上场,那能不能通过Node.js来调用系统的API呢,好像可以,但是要去找相应的系统调用模块和学习资料要花很多时间,既然Node.js可以实现这个需求,那就先keep住这个方案;


另外,Node.js能实现的需求,PHP应该也能实现,不过PHP本身好像没有连接wifi的API,怎么办呢,换一种方式,可以使用exec()或者system()这样的函数来调用系统命令来连接wifi;


最后,知道了可以通过PHP来调用系统命令,那就只要知道连接wifi的命令的好办了,通过查询得知在CMD中连接WiFi的命令要使用netsh wlan加上参数即可连接wifi。


有了这么一个从高级到底层的整体思路,就可以开干了。


其实,还有一种方案比Apache+PHP这种方式来实现更好,就是使用npm的electron模块来将网页打包成一个桌面应用,安装后通过node.js监听并接收打包后的网页post过来的账号密码再调用系统命令来连接WIFI。不过本文只介绍在Windows系统中的PHP的需求实现,日后有时间我会写一篇electron的打包教程。



===============

好,本文正式开始!

===============



连接wifi的命令有两句,使用方式非常简单:


(1)设置配置文件

netsh wlan set profileparameter name=账号 SSIDname=还是账号 keyMaterial=密码

注意name和SSIDname两个一般情况下是相等的,都是wifi的账号



(2)按配置文件信息连接WIFI
netsh wlan connect name=账号 ssid=还是账号
注意连接命令中没有密码



需求的实现也非常简单:


一、为了方便PHP调用,我把这两句命令写成一个bat文件。在编辑器中新建一个名为wlan的bat文件,wlan.bat写入内容如下:

netsh wlan set profileparameter name=%1 SSIDname=%1 keyMaterial=%2
netsh wlan connect name=%1 ssid=%1



二、在php调用这个bat文件连接wifi之前,把网页的界面写好,我只是简单写一个wlan.html的例子:

<html>
<head>
    <title>本地连接wifi网页</title>
</head>
<body>
    <form action="wlan.php" method="post">
        <input type="text" name="wlan_name" />
        <input type="text" name="wlan_pass" />
        <input type="submit" />
    </form>
</body>
</html>


三、根据网页,得知页面点击提交按钮后会post了wlan_name和wlan_pass到wlan.php,所以可以开始写PHP代码了,wlan.php如下:

<?php
    //如果有数据POST过来,接收账号和密码数据
    if( !empty($_POST['wlan_name']) && !empty($_POST['wlan_pass']) ){
    
        //调用bat的命令,格式为 "wlan.bat 账号 密码"
        $wlan_connect = 'wlan.bat '.$_POST['wlan_name'].' '.$_POST['wlan_pass'];
        
        //获取命令调用结果
        $msg = exec( $wlan_connect );
        
        //输出结果
        echo $msg;
    } 
?>


把上面的 wlan.bat wlan.html wlan.php 三个文件放在Apache的网站目录下,在浏览器输入 localhost/wlan.html即可看到效果,输入账号密码,点击提交按钮即可连接对应账号密码的WIFI。


如果你不会开发桌面应用的情况下,可以像这样制作一个单机网页来满足需求。但是我还是建议你学习Node.js,在electron下将网页文件打包成客户端(Windows、Linux)来实现桌面应用,或者直接学习桌面应用开发让用户获得更好的体验。


回到原文的需求,在Linux系统中,也是按照这样的思路:写shell命令,用PHP调用shell命令即可。


除了bat、shell或CMD命令外,还有对WIFI进行更加全面控制的方式,是用C语言来调用系统API来实现的,有兴趣的可以参考CSDN中的一篇文章:  http://blog.csdn/lincyang/article/details/34430939/,讲述使用C语言来控制wifi,不过由于我没研究过windows API,所以大多看不懂,平时我都是使用cmd命令来解决问题的,想研究一下Native Wifi API的童鞋可以参考一下这篇文章。


最后,如果本文有错误的地方请不吝指教,谢谢阅读!




更多推荐

怎么写一个本地网页来连接WIFI(如何使用cmd命令连接wifi)