raspbian wifi support, updated docs
This commit is contained in:
+95
-3
@@ -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';
|
||||
|
||||
Reference in New Issue
Block a user