使用Nodejs操作WiFI的各种方法

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

相关推荐
小羊没烦恼!17 分钟前
T-SQL查询高级—SQL Server索引中的碎片和填充因子
开发语言·前端·javascript·数据库·后端·python·web安全
定栓1 小时前
Webpack迁到Vite第一节:模块系统迁移:require → import
运维·前端·webpack
小熊在忙fpga1 小时前
N32G430芯片的flash表示
前端·javascript·html
Data analyse4561 小时前
App埋点版本兼容的字段迁移校验
大数据·运维·服务器·前端·数据库·数据分析
NC 王炸1 小时前
AI 做的便签,换个浏览器就没了?加一个导出按钮,把数据带走
javascript·ai编程·数据备份·localstorage·txt导出
todoitbo1 小时前
本来只想给内网开个口子,Natapp 却多给了一道防护
前端·javascript·vue.js·内网穿透·网络防护·natapp
会灭火的程序员1 小时前
SuperMap AgentX Server智能体接入WEB应用技术文档
前端·supermap·agentx·agentx server
CRMEB1 小时前
商品 SKU 设计,从简单规格到多规格踩过什么
java·前端·数据库·开源
Chloe.Zz1 小时前
一篇入门Agent
开发语言·前端·javascript
java1234_小锋1 小时前
【技术专题】HTML5 网页技术 - HTML5 表格标签
前端·html·html5