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

相关推荐
天蓝色的鱼鱼6 分钟前
写Tailwind CSS像在写屎山?这锅该不该它背
前端·css
#做一个清醒的人11 分钟前
【Electron】IpcMainEvent 参数使用总结
前端·electron
月弦笙音18 分钟前
【包管理器】pnpm、npm、cnpm、yarn 深度对比
前端
吹水一流23 分钟前
微信小程序页面栈:从一个 Bug 讲到彻底搞懂
前端·微信小程序
j***827026 分钟前
【MyBatisPlus】MyBatisPlus介绍与使用
android·前端·后端
Python大数据分析@27 分钟前
我把pdfplumber整成了可以拖拉拽的web软件
前端·pdf
小华同学ai32 分钟前
终于有人帮你整理好了,火爆的“系统级提示词”支持ChatGPT、Claude、Gemini、xAI的
前端·后端·github
葡萄城技术团队35 分钟前
SpreadJS 电子表格权限管控设置指南
前端
HashTang35 分钟前
一个人就是一支队伍:从 Next.js 到显示器,聊聊我的“全栈续航”方案
前端·后端·程序员
朕的剑还未配妥41 分钟前
vue2中transition使用方法解析,包含底部弹窗示例、样式未生效踩坑记录
前端·vue.js