使用Nodejs操作WiFI的各种方法

1.前言

不少应用都会遇到操作wifi的情况,例如在electron中可以使用nodejsAPI,那么这里就可以对wifi进行操作,本文详细列举了如何进行搜索wifi,连接wifi,断开wifi,忘记wifi,重连wifi,判断当前是否可上网等操作,以及进行处理,处理,可以同时在windowslinux下使用

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系统的不同,自动进行不同的处理,如果您看到这篇文章之后有什么疑问或者有更好的方案,欢迎评论+私信😁

相关推荐
飞翔的佩奇9 分钟前
【完整源码+数据集+部署教程】【天线&水】舰船战舰检测与分类图像分割系统源码&数据集全套:改进yolo11-repvit
前端·python·yolo·计算机视觉·数据集·yolo11·舰船战舰检测与分类图像分割系统
哆啦A梦15881 小时前
点击Top切换数据
前端·javascript·vue.js
程序猿追1 小时前
Vue组件化开发
前端·html
艾德金的溪2 小时前
redis-7.4.6部署安装
前端·数据库·redis·缓存
小光学长2 小时前
基于Vue的2025年哈尔滨亚冬会志愿者管理系统5zqg6m36(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
前端·数据库·vue.js
@PHARAOH2 小时前
WHAT - 受控组件和非受控组件
前端·javascript·react.js
生莫甲鲁浪戴2 小时前
Android Studio新手开发第二十六天
android·前端·android studio
JH30733 小时前
B/S架构、HTTP协议与Web服务器详解
前端·http·架构
yi碗汤园3 小时前
【超详细】C#自定义工具类-StringHelper
开发语言·前端·unity·c#·游戏引擎
Kevin Wang7274 小时前
解除chrome中http无法录音问题,权限
前端·chrome