added wifi scan for linux
This commit is contained in:
parent
d29686ed7f
commit
fa077ff94d
@ -31,6 +31,7 @@ const battery = require('./battery');
|
||||
const graphics = require('./graphics');
|
||||
const filesystem = require('./filesystem');
|
||||
const network = require('./network');
|
||||
const wifi = require('./wifi');
|
||||
const processes = require('./processes');
|
||||
const users = require('./users');
|
||||
const internet = require('./internet');
|
||||
@ -350,6 +351,8 @@ exports.networkInterfaces = network.networkInterfaces;
|
||||
exports.networkStats = network.networkStats;
|
||||
exports.networkConnections = network.networkConnections;
|
||||
|
||||
exports.wifi = wifi.wifi;
|
||||
|
||||
exports.services = processes.services;
|
||||
exports.processes = processes.processes;
|
||||
exports.processLoad = processes.processLoad;
|
||||
|
||||
96
lib/wifi.js
Normal file
96
lib/wifi.js
Normal file
@ -0,0 +1,96 @@
|
||||
'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;
|
||||
Loading…
x
Reference in New Issue
Block a user