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

相关推荐
子兮曰4 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰4 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万4 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝4 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋4 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁4 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
李少兄4 天前
JavaScript 隐式全局变量解析
javascript
汉堡大王95274 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大4 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师4 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端