97 lines
3.4 KiB
JavaScript
97 lines
3.4 KiB
JavaScript
'use strict';
|
|
// @ts-check
|
|
// ==================================================================================
|
|
// wifi.js
|
|
// ----------------------------------------------------------------------------------
|
|
// Description: System Information - library
|
|
// for Node.js
|
|
// Copyright: (c) 2014 - 2019
|
|
// Author: Sebastian Hildebrandt
|
|
// ----------------------------------------------------------------------------------
|
|
// License: MIT
|
|
// ==================================================================================
|
|
// 9. wifi
|
|
// ----------------------------------------------------------------------------------
|
|
|
|
const os = require('os');
|
|
const exec = require('child_process').exec;
|
|
const execSync = require('child_process').execSync;
|
|
const fs = require('fs');
|
|
const util = require('./util');
|
|
|
|
let _platform = process.platform;
|
|
|
|
const _linux = (_platform === 'linux');
|
|
const _darwin = (_platform === 'darwin');
|
|
const _windows = (_platform === 'win32');
|
|
const _freebsd = (_platform === 'freebsd');
|
|
const _openbsd = (_platform === 'openbsd');
|
|
const _netbsd = (_platform === 'netbsd');
|
|
const _sunos = (_platform === 'sunos');
|
|
|
|
function wifiDBFromQuality(quality) {
|
|
return (parseFloat(quality) / 2 - 100);
|
|
}
|
|
|
|
function wifiQualityFromDB(db) {
|
|
return 2 * (parseFloat(db) + 100);
|
|
}
|
|
|
|
function wifi(callback) {
|
|
|
|
return new Promise((resolve) => {
|
|
process.nextTick(() => {
|
|
let result = [];
|
|
if (_linux) {
|
|
let cmd = 'nmcli --terse --fields active,ssid,bssid,mode,chan,freq,signal,security,wpa-flags,rsn-flags device wifi list';
|
|
exec(cmd, { maxBuffer: 1024 * 2000 }, function (error, stdout) {
|
|
|
|
const parts = stdout.toString().split('ACTIVE:');
|
|
parts.shift();
|
|
parts.forEach(part => {
|
|
part = 'ACTIVE:' + part;
|
|
const lines = part.split(os.EOL);
|
|
const channel = util.getValue(lines, 'CHAN');
|
|
const frequency = util.getValue(lines, 'FREQ').toLowerCase().replace('mhz', '').trim()
|
|
const security = util.getValue(lines, 'SECURITY').replace('(', '').replace(')', '')
|
|
const wpaFlags = util.getValue(lines, 'WPA-FLAGS').replace('(', '').replace(')', '')
|
|
const rsnFlags = util.getValue(lines, 'RSN-FLAGS').replace('(', '').replace(')', '')
|
|
result.push({
|
|
ssid: util.getValue(lines, 'SSID'),
|
|
bssid: util.getValue(lines, 'BSSID'),
|
|
mode: util.getValue(lines, 'MODE'),
|
|
channel: channel ? parseInt(channel, 10) : -1,
|
|
frequency: frequency ? parseInt(frequency, 10) : -1,
|
|
signalLevel: wifiDBFromQuality(util.getValue(lines, 'SIGNAL')),
|
|
quality: parseFloat(util.getValue(lines, 'SIGNAL')),
|
|
security: security && security !== 'none' ? security.split(' ') : [],
|
|
wpaFlags: wpaFlags && wpaFlags !== 'none' ? wpaFlags.split(' ') : [],
|
|
rsnFlags: rsnFlags && rsnFlags !== 'none' ? rsnFlags.split(' ') : []
|
|
})
|
|
})
|
|
|
|
if (callback) {
|
|
callback(result);
|
|
}
|
|
resolve(result);
|
|
});
|
|
} else if (_darwinx) {
|
|
let cmd = '';
|
|
exec(cmd, { maxBuffer: 1024 * 2000 }, function (error, stdout) {
|
|
if (callback) {
|
|
callback(result);
|
|
}
|
|
resolve(result);
|
|
});
|
|
} else {
|
|
if (callback) {
|
|
callback(result);
|
|
}
|
|
resolve(result);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
exports.wifi = wifi;
|