1.前言
不少应用都会遇到操作wifi
的情况,例如在electron
中可以使用nodejs
的API
,那么这里就可以对wifi
进行操作,本文详细列举了如何进行搜索wifi
,连接wifi
,断开wifi
,忘记wifi
,重连wifi
,判断当前是否可上网
等操作,以及进行处理,处理,可以同时在windows
和linux
下使用
2.初始化操作
js
// 首先下载第三方库node-wifi,通过此库进行wifi操作
npm i node-wifi
// 然后对node-wifi进行初始化操作
const wifi = require('node-wifi');
// 初始化node-wifi(自动选择网络接口)
wifi.init({ iface: null });
3.搜索WiFI列表
js
// 封装一个方法,调用此方法后可以使用.then获取成功回调,成功回调获取到的参数就是搜索到的网络列表
const scanNetworks = async () => {
return new Promise((resolve, reject) => wifi.scan((error, networks) => error ? resolve([]) : resolve(networks)))
}
4.获取当前连接WiFI
js
const getCurrentWifi = () => new Promise(resolve => {
// 判断是否为linux环境(windows环境使用第三方库,linux环境使用命令行)
if (process.platform === 'linux') {
// linux环境
exec('iwgetid', (error, data) => {
// 存在错误的情况下直接返回空内容,表示当前未连接wifi
if (error) {
console.error('linux环境下执行iwgetid命令失败:', error)
return resolve({})
}
// 从data中获取到真实的wifi名称
const wifiName = data.match(/ESSID:"(.*)"/)[1]
// 将wifi名称返回出去
resolve({ ssid: wifiName })
})
} else {
// 其他环境(以windows为主)
wifi.getCurrentConnections((error, currentConnections) => {
// 获取当前连接的wifi信息出现错误
if (error) {
console.error('windows环境下获取当前连接的wifi信息失败:', error)
return resolve({})
}
// 判断是否不存在已连接的wifi信息
if (currentConnections.length === 0) {
console.error('windows环境下未查找到当前已连接的wifi信息:', error)
return resolve({})
}
// 从currentConnections中获取到真实的wifi名称
const ssid = currentConnections[0].bssid
console.info(`windows环境下获取到当前连接的wifi名称:`, ssid)
// 将wifi名称返回出去
resolve({ ssid })
});
}
})
4.断开当前WiFI
js
const disconnectNetwork = (wifiName) => {
return new Promise((resolve, reject) => {
// linux环境下需要使用命令行断开
if (process.platform === 'linux') {
// 断开指定的wifi名称连接
exec(`nmcli connection down ${wifiName}`);
} else {
// 其他环境下直接使用wifi.disconnect()进行断连
wifi.disconnect()
}
})
5.连接WiFi
js
// 验证wifi是否连接成功
const validConnect = (resolve, reject, wifiName, err) => {
// 存在err的情况下则表示wifi断连失败
if (err) {
console.error(`${wifiName}连接失败!`, err)
// 返回操作失败
return reject()
}
// 不存在err,操作成功
console.success(`${wifiName}连接成功!`)
resolve()
}
// 连接wifi操作
const connectToNetwork = (ssid, password) => {
return new Promise((resolve, reject) => {
// linux环境下使用指定命令进行连接wifi
if (process.platform === 'linux') {
// 执行命令进行连接wifi
exec(`sudo -S nmcli device wifi connect '${ssid}' password '${password}'`, err => validConnect(resolve, reject, ssid, err))
} else {
// 其他环境下连接wifi(主要以windows为主)
wifi.connect({ ssid, password }, err => validConnect(resolve, reject, ssid, err))
}
})
}
6.重连WiFI
重连WiFI
操作其实就是保存用户每次连接成功的wifi的wifi名称与密码,触发重连WiFi的时候,重新调用一下连接wifi即可,只需要传入wifi名称和密码就可以了
7.忘记WiFI
忘记WiFi
操作就是将保存的用户的wifi名称和密码移除,这样就不能进行重连wifi操作了
8.如何验证当前wifi确实可用,可以上网?
js
// 在nodejs环境下,使用命令行不断的ping baidu即可,如果得到回复,表示可以正常上网,接口也可以正常调用,如果得不到回复,就说明wifi断开了,无法上网
exec('ping www.baidu.com',error=>{
// 如果存在error,则未连接
if (error) {
console.log('未连接wifi')
return
}
console.log('wifi连接成功')
})
9.总结
本篇文章详细介绍了Nodejs如何进行搜索wifi
,连接wifi
,断开wifi
,忘记wifi
,重连wifi
,判断当前是否可上网
等操作,其中使用了node-wifi
第三方库,并且根据windows与linux系统的不同,自动进行不同的处理,如果您看到这篇文章之后有什么疑问或者有更好的方案,欢迎评论+私信😁