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

相关推荐
zhu128930355626 分钟前
用Rust和WebAssembly打造轻量级前端加密工具
前端·rust·wasm
@PHARAOH1 小时前
WHAT - Electron 系列(一)
前端·javascript·electron
loriloy1 小时前
Electron崩溃问题排查指南
javascript·electron
半句唐诗1 小时前
设计与实现高性能安全TOKEN系统
前端·网络·安全
小满zs1 小时前
React-router v7 第二章(路由模式)
前端·react.js
yanxy5122 小时前
【TS学习】(18)分发逆变推断
前端·学习·typescript
大莲芒2 小时前
react 15-16-17-18各版本的核心区别、底层原理及演进逻辑的深度解析--react18
前端·javascript·react.js
Hellyc2 小时前
SpringMVC响应数据:页面跳转与回写数据
java·前端·学习
CaveShao2 小时前
前端开发中常见的 SEO 优化
前端·seo
Hyyy3 小时前
ElementPlus按需加载 + 配置中文避坑(干掉1MB冗余代码)
前端·javascript·面试