raspbian wifi support, updated docs

This commit is contained in:
Sebastian Hildebrandt
2021-01-26 20:52:13 +01:00
parent befe16bd22
commit 7a9f10f988
55 changed files with 238 additions and 150 deletions
+95 -3
View File
@@ -15,6 +15,7 @@
const os = require('os');
const exec = require('child_process').exec;
const execSync = require('child_process').execSync;
const util = require('./util');
let _platform = process.platform;
@@ -144,10 +145,101 @@ function wifiNetworks(callback) {
});
});
if (callback) {
callback(result);
if (result.length === 0) {
try {
const iwconfigParts = execSync('export LC_ALL=C; iwconfig 2>/dev/null; unset LC_ALL').toString().split('\n\n');
let iface = '';
for (let i = 0; i < iwconfigParts.length; i++) {
if (iwconfigParts[i].indexOf('no wireless') === -1) {
iface = iwconfigParts[i].split(' ')[0];
}
}
if (iface()) {
let iwlistParts = execSync(`export LC_ALL=C; iwlist ${iface} sscan 2>/dev/null; unset LC_ALL`).toString().split(' Cell ');
if (iwlistParts.length > 1) {
iwlistParts.shift();
for (let i = 0; i < iwlistParts.length; i++) {
const lines = iwlistParts[i].split('\n');
const channel = util.getValue(lines, 'channel', ':', true);
const address = util.getValue(lines, 'address', ':', true);
const mode = util.getValue(lines, 'mode', ':', true);
const frequency = util.getValue(lines, 'frequency', ':', true);
const qualityString = util.getValue(lines, 'Quality', '=', true);
const dbParts = qualityString.toLowerCase().split('signal level=');
const db = dbParts.length > 1 ? util.toInt(dbParts[1]) : 0;
const quality = db ? wifiQualityFromDB(db) : 0;
const ssid = util.getValue(lines, 'essid', ':', true);
// security and wpa-flags
const isWpa = iwlistParts[i].indexOf(' WPA ') >= 0;
const isWpa2 = iwlistParts[i].indexOf('WPA2 ') >= 0;
const security = [];
if (isWpa) { security.push('WPA'); }
if (isWpa2) { security.push('WPA2'); }
const wpaFlags = [];
let wpaFlag = '';
lines.forEach(function (line) {
const l = line.trim().toLowerCase();
if (l.indexOf('group cipher')) {
if (wpaFlag) {
wpaFlags.push(wpaFlag);
}
const parts = l.split(':');
if (parts.length > 1) {
wpaFlag = parts[1].trim();
}
}
if (l.indexOf('pairwise cipher')) {
const parts = l.split(':');
if (parts.length > 1) {
if (parts[i].indexOf('tkip')) { wpaFlag = wpaFlag ? 'TKIP/' + wpaFlag : 'TKIP'; }
else if (parts[i].indexOf('ccmp')) { wpaFlag = wpaFlag ? 'CCMP/' + wpaFlag : 'CCMP'; }
else if (parts[i].indexOf('proprietary')) { wpaFlag = wpaFlag ? 'PROP/' + wpaFlag : 'PROP'; }
}
}
if (l.indexOf('Authentication Suites')) {
const parts = l.split(':');
if (parts.length > 1) {
if (parts[i].indexOf('802.1x')) { wpaFlag = wpaFlag ? '802.1x/' + wpaFlag : '802.1x'; }
else if (parts[i].indexOf('psk')) { wpaFlag = wpaFlag ? 'PSK/' + wpaFlag : 'PSK'; }
}
}
});
if (wpaFlag) {
wpaFlags.push(wpaFlag);
}
result.push({
ssid,
bssid: address,
mode,
channel: channel ? util.toInt(channel) : null,
frequency: frequency ? util.toInt(frequency.replace('.', '')) : null,
signalLevel: db,
quality,
security,
wpaFlags,
rsnFlags: []
});
}
}
}
if (callback) {
callback(result);
}
resolve(result);
} catch (e) {
if (callback) {
callback(result);
}
resolve(result);
}
} else {
if (callback) {
callback(result);
}
resolve(result);
}
resolve(result);
});
} else if (_darwin) {
let cmd = '/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -s';