6 Commits

11 changed files with 144 additions and 102 deletions

View File

@ -66,6 +66,22 @@ Unfortunately, Mac OS-X and Windows use the system language for the output which
generic way of parsing the data. If you experience any troubles, please create a GitHub issue and supply generic way of parsing the data. If you experience any troubles, please create a GitHub issue and supply
the output of the tool. the output of the tool.
## Limits of the tool
There is no such thing as perfect software and this is all the more true when the tools used require different
access rights depending on
the operating system. Please note the following restrictions
before using this tool in a productive system.
**Linux**: iwlist does only return all found networks if run as sudo! Otherwise you'll
get only the network you're connected to.
**Windows**: there are some network cards which do not
return the MAC address and other parameters of the found networks. In this case
the "found" networks are ignored as there is no valuable data. If you have this effect
on your system, please provide as many information about your system (PC manufacturer, network
card, OS,...) as available. Thanks
## Licence ## Licence
The MIT License (MIT) The MIT License (MIT)

View File

@ -5,7 +5,7 @@
* Created by kc on 04.04.16. * Created by kc on 04.04.16.
*/ */
var scanner = require('../index'); const scanner = require('../index');
scanner.scan((err, output) => { scanner.scan((err, output) => {
if (err) { if (err) {

View File

@ -11,7 +11,7 @@ const airport = require('./lib/airport');
const iwlist = require('./lib/iwlist'); const iwlist = require('./lib/iwlist');
const netsh = require('./lib/netsh'); const netsh = require('./lib/netsh');
var scanner; let scanner;
// Initializing the tools // Initializing the tools
function initTools(callback) { function initTools(callback) {
@ -42,7 +42,7 @@ function initTools(callback) {
} }
], ],
function (err, results) { function (err, results) {
var res = _.find(results, let res = _.find(results,
function (f) { function (f) {
return !f.err return !f.err
}); });

View File

@ -8,25 +8,26 @@ const cmdLine = tool + ' -s';
const detector = tool + ' -getInfo'; const detector = tool + ' -getInfo';
const macRegex = /([0-9a-zA-Z]{1}[0-9a-zA-Z]{1}[:]{1}){5}[0-9a-zA-Z]{1}[0-9a-zA-Z]{1}/; const macRegex = /([0-9a-zA-Z]{1}[0-9a-zA-Z]{1}[:]{1}){5}[0-9a-zA-Z]{1}[0-9a-zA-Z]{1}/;
/** /**
* Parsing the output of airport (Mac OS X) * Parsing the output of airport (Mac OS X)
* @param str output of the tool * @param str output of the tool
* @param callback * @param callback
*/ */
function parseOutput(str, callback) { function parseOutput(str, callback) {
var err = null; let err = null;
let wifis = [];
try { try {
var lines = str.split('\n'); let lines = str.split('\n');
var wifis = [];
for (var i = 1, l = lines.length; i < l; i++) { for (let i = 1, l = lines.length; i < l; i++) {
var mac = lines[i].match(macRegex); let mac = lines[i].match(macRegex);
if (!mac) { if (!mac) {
continue; continue;
} }
var macStart = lines[i].indexOf(mac[0]); let macStart = lines[i].indexOf(mac[0]);
var elements = lines[i].substr(macStart).split(/[ ]+/); let elements = lines[i].substr(macStart).split(/[ ]+/);
wifis.push({ wifis.push({
'ssid' : lines[i].substr(0, macStart).trim(), 'ssid' : lines[i].substr(0, macStart).trim(),
'mac' : elements[0].trim(), 'mac' : elements[0].trim(),
@ -38,9 +39,10 @@ function parseOutput(str, callback) {
catch (ex) { catch (ex) {
err = ex; err = ex;
} }
finally {
callback(err, wifis); callback(err, wifis);
} }
}
module.exports = { module.exports = {

View File

@ -13,21 +13,22 @@ const detector = tool + ' --help';
const macRegex = /([0-9a-zA-Z]{1}[0-9a-zA-Z]{1}[:]{1}){5}[0-9a-zA-Z]{1}[0-9a-zA-Z]{1}/; const macRegex = /([0-9a-zA-Z]{1}[0-9a-zA-Z]{1}[:]{1}){5}[0-9a-zA-Z]{1}[0-9a-zA-Z]{1}/;
const cellRegex = /Cell [0-9]{2,} - Address:/; const cellRegex = /Cell [0-9]{2,} - Address:/;
/** /**
* Parsing the output of iwlist, tool having a lot of different faces :-( * Parsing the output of iwlist, tool having a lot of different faces :-(
* @param str output of the tool * @param str output of the tool
* @param callback * @param callback
*/ */
function parseOutput(str, callback) { function parseOutput(str, callback) {
var err = null; let err = null;
var wifis = []; let wifis = [];
try { try {
var blocks = str.split(cellRegex); let blocks = str.split(cellRegex);
blocks.forEach(block => { blocks.forEach(block => {
var network = {}; let network = {};
var lines = block.split('\n'); let lines = block.split('\n');
if (macRegex.exec(lines[0])) { if (macRegex.exec(lines[0])) {
// First line is the mac address (always! (?)) // First line is the mac address (always! (?))
network.mac = lines[0].trim(); network.mac = lines[0].trim();
@ -43,8 +44,8 @@ function parseOutput(str, callback) {
} }
// Channel, an ugly thing to get it // Channel, an ugly thing to get it
else if (_.startsWith(line.trim(), 'Frequency:')) { else if (_.startsWith(line.trim(), 'Channel:')) {
network.channel = parseInt(_.trim(line, ' )').split(/Channel/)[1], 10); network.channel = parseInt(_.trim(line, ' )').split(/:/)[1]);
} }
// Another ugly thing, the signal which can have different formats, even worse als // Another ugly thing, the signal which can have different formats, even worse als
@ -53,15 +54,14 @@ function parseOutput(str, callback) {
if (line.indexOf('Quality') > -1) { if (line.indexOf('Quality') > -1) {
// This is a "Quality=40/70 Signal level=-70 dBm" line // This is a "Quality=40/70 Signal level=-70 dBm" line
network.rssi = parseInt(line.substr(line.indexOf('Signal level') + 13), 10); network.rssi = parseInt(line.substr(line.indexOf('Signal level') + 13), 10);
} } else {
else {
// This is a "Signal level=60/100" line // This is a "Signal level=60/100" line
var elements = line.split('='); let elements = line.split('=');
elements.forEach(e => { elements.forEach(e => {
if (e.indexOf('/') > 0) { if (e.indexOf('/') > 0) {
// that's our part // that's our part
var parts = e.split('/'); let parts = e.split('/');
var level = Math.floor(100 * parseInt(parts[0], 10) / parseInt(parts[1], 10)); let level = Math.floor(100 * parseInt(parts[0], 10) / parseInt(parts[1], 10));
network.rssi = level / 2 - 100; network.rssi = level / 2 - 100;
} }
}) })

View File

@ -15,9 +15,9 @@ const detector = tool + ' show alias';
* an approach of analyzing the structure of the output * an approach of analyzing the structure of the output
*/ */
function parseOutput(str, callback) { function parseOutput(str, callback) {
var blocks = str.split('\n\n'); let blocks = str.split('\n\n');
var wifis = []; let wifis = [];
var err = null; let err = null;
try { try {
if (blocks.length < 2) { if (blocks.length < 2) {
// 2nd try, with \r\n // 2nd try, with \r\n
@ -40,18 +40,18 @@ function parseOutput(str, callback) {
// Channel : 6 // Channel : 6
// Basic rates (MBit/s) : 1 2 5.5 11 // Basic rates (MBit/s) : 1 2 5.5 11
// Other rates (MBit/s) : 6 9 12 18 24 36 48 54 // Other rates (MBit/s) : 6 9 12 18 24 36 48 54
for (var i = 1, l = blocks.length; i < l; i++) { for (let i = 1, l = blocks.length; i < l; i++) {
var network = {}; let network = {};
var lines = blocks[i].split('\n'); let lines = blocks[i].split('\n');
var regexChannel = /[a-zA-Z0-9()\s]+:[\s]*[0-9]+$/g; let regexChannel = /[a-zA-Z0-9()\s]+:[\s]*[0-9]+$/g;
if (!lines || lines.length < 2) { if (!lines || lines.length < 2) {
continue; continue;
} }
// First line is always the SSID (which can be empty) // First line is always the SSID (which can be empty)
var ssid = lines[0].substring(lines[0].indexOf(':') + 1).trim(); let ssid = lines[0].substring(lines[0].indexOf(':') + 1).trim();
for (var t = 1, n = lines.length; t < n; t++) { for (let t = 1, n = lines.length; t < n; t++) {
if (lines[t].split(':').length === 7) { if (lines[t].split(':').length === 7) {
// This is the mac address, use this one as trigger for a new network // This is the mac address, use this one as trigger for a new network
if (network.mac) { if (network.mac) {
@ -61,14 +61,12 @@ function parseOutput(str, callback) {
ssid: ssid, ssid: ssid,
mac : lines[t].substring(lines[t].indexOf(':') + 1).trim() mac : lines[t].substring(lines[t].indexOf(':') + 1).trim()
}; };
} } else if (lines[t].indexOf('%') > 0) {
else if (lines[t].indexOf('%') > 0) {
// Network signal strength, identified by '%' // Network signal strength, identified by '%'
var level = parseInt(lines[t].split(':')[1].split('%')[0].trim(), 10); let level = parseInt(lines[t].split(':')[1].split('%')[0].trim(), 10);
network.rssi = (level / 2) - 100; network.rssi = (level / 2) - 100;
} } else if (!network.channel) {
else if (!network.channel) {
// A tricky one: the channel is the first one having just ONE number. Set only // A tricky one: the channel is the first one having just ONE number. Set only
// if the channel is not already set ("Basic Rates" can be a single number also) // if the channel is not already set ("Basic Rates" can be a single number also)
if (regexChannel.exec(lines[t].trim())) { if (regexChannel.exec(lines[t].trim())) {

104
package-lock.json generated
View File

@ -1,6 +1,6 @@
{ {
"name": "node-wifi-scanner", "name": "node-wifi-scanner",
"version": "1.1.0", "version": "1.1.1",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {
@ -55,12 +55,9 @@
"dev": true "dev": true
}, },
"async": { "async": {
"version": "2.6.2", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", "resolved": "https://registry.npmjs.org/async/-/async-3.1.0.tgz",
"integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", "integrity": "sha512-4vx/aaY6j/j3Lw3fbCHNWP0pPaTCew3F6F3hYyl/tHs/ndmV1q7NW9T5yuJ2XAGwdQrP+6Wu20x06U4APo/iQQ=="
"requires": {
"lodash": "^4.17.11"
}
}, },
"balanced-match": { "balanced-match": {
"version": "1.0.0", "version": "1.0.0",
@ -175,9 +172,9 @@
}, },
"dependencies": { "dependencies": {
"semver": { "semver": {
"version": "5.7.0", "version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true "dev": true
} }
} }
@ -256,17 +253,21 @@
} }
}, },
"es-abstract": { "es-abstract": {
"version": "1.13.0", "version": "1.14.2",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.14.2.tgz",
"integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", "integrity": "sha512-DgoQmbpFNOofkjJtKwr87Ma5EW4Dc8fWhD0R+ndq7Oc456ivUfGOOP6oAZTTKl5/CcNMP+EN+e3/iUzgE0veZg==",
"dev": true, "dev": true,
"requires": { "requires": {
"es-to-primitive": "^1.2.0", "es-to-primitive": "^1.2.0",
"function-bind": "^1.1.1", "function-bind": "^1.1.1",
"has": "^1.0.3", "has": "^1.0.3",
"has-symbols": "^1.0.0",
"is-callable": "^1.1.4", "is-callable": "^1.1.4",
"is-regex": "^1.0.4", "is-regex": "^1.0.4",
"object-keys": "^1.0.12" "object-inspect": "^1.6.0",
"object-keys": "^1.1.1",
"string.prototype.trimleft": "^2.0.0",
"string.prototype.trimright": "^2.0.0"
} }
}, },
"es-to-primitive": { "es-to-primitive": {
@ -745,9 +746,9 @@
} }
}, },
"lodash": { "lodash": {
"version": "4.17.11", "version": "4.17.15",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
"integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
}, },
"log-symbols": { "log-symbols": {
"version": "2.2.0", "version": "2.2.0",
@ -851,9 +852,9 @@
} }
}, },
"mocha": { "mocha": {
"version": "6.1.2", "version": "6.2.0",
"resolved": "https://registry.npmjs.org/mocha/-/mocha-6.1.2.tgz", "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.0.tgz",
"integrity": "sha512-BgD2/RozoSC3uQK5R0isDcxjqaWw2n5HWdk8njYUyZf2NC79ErO5FtYVX52+rfqGoEgMfJf4fuG0IWh2TMzFoA==", "integrity": "sha512-qwfFgY+7EKAAUAdv7VYMZQknI7YJSGesxHyhn6qD52DV8UcSZs5XwCifcZGMVIE4a5fbmhvbotxC0DLQ0oKohQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"ansi-colors": "3.2.3", "ansi-colors": "3.2.3",
@ -865,12 +866,12 @@
"glob": "7.1.3", "glob": "7.1.3",
"growl": "1.10.5", "growl": "1.10.5",
"he": "1.2.0", "he": "1.2.0",
"js-yaml": "3.13.0", "js-yaml": "3.13.1",
"log-symbols": "2.2.0", "log-symbols": "2.2.0",
"minimatch": "3.0.4", "minimatch": "3.0.4",
"mkdirp": "0.5.1", "mkdirp": "0.5.1",
"ms": "2.1.1", "ms": "2.1.1",
"node-environment-flags": "1.0.4", "node-environment-flags": "1.0.5",
"object.assign": "4.1.0", "object.assign": "4.1.0",
"strip-json-comments": "2.0.1", "strip-json-comments": "2.0.1",
"supports-color": "6.0.0", "supports-color": "6.0.0",
@ -904,16 +905,6 @@
"path-is-absolute": "^1.0.0" "path-is-absolute": "^1.0.0"
} }
}, },
"js-yaml": {
"version": "3.13.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.0.tgz",
"integrity": "sha512-pZZoSxcCYco+DIKBTimr67J6Hy+EYGZDY/HCWC+iAEA9h1ByhMXAIVUXMcMFpOCxQ/xjXmPI2MkDL5HRm5eFrQ==",
"dev": true,
"requires": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
}
},
"supports-color": { "supports-color": {
"version": "6.0.0", "version": "6.0.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz",
@ -938,12 +929,21 @@
"dev": true "dev": true
}, },
"node-environment-flags": { "node-environment-flags": {
"version": "1.0.4", "version": "1.0.5",
"resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.4.tgz", "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz",
"integrity": "sha512-M9rwCnWVLW7PX+NUWe3ejEdiLYinRpsEre9hMkU/6NS4h+EEulYaDH1gCEZ2gyXsmw+RXYDaV2JkkTNcsPDJ0Q==", "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"object.getownpropertydescriptors": "^2.0.3" "object.getownpropertydescriptors": "^2.0.3",
"semver": "^5.7.0"
},
"dependencies": {
"semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true
}
} }
}, },
"nopt": { "nopt": {
@ -988,6 +988,12 @@
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
"dev": true "dev": true
}, },
"object-inspect": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz",
"integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==",
"dev": true
},
"object-keys": { "object-keys": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
@ -1055,9 +1061,9 @@
"dev": true "dev": true
}, },
"p-limit": { "p-limit": {
"version": "2.2.0", "version": "2.2.1",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz",
"integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==",
"dev": true, "dev": true,
"requires": { "requires": {
"p-try": "^2.0.0" "p-try": "^2.0.0"
@ -1329,6 +1335,26 @@
"strip-ansi": "^4.0.0" "strip-ansi": "^4.0.0"
} }
}, },
"string.prototype.trimleft": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz",
"integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==",
"dev": true,
"requires": {
"define-properties": "^1.1.3",
"function-bind": "^1.1.1"
}
},
"string.prototype.trimright": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz",
"integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==",
"dev": true,
"requires": {
"define-properties": "^1.1.3",
"function-bind": "^1.1.1"
}
},
"strip-ansi": { "strip-ansi": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",

View File

@ -1,6 +1,6 @@
{ {
"name": "node-wifi-scanner", "name": "node-wifi-scanner",
"version": "1.1.1", "version": "1.1.2",
"description": "node.js module for WiFi network detection", "description": "node.js module for WiFi network detection",
"main": "index.js", "main": "index.js",
"keywords": [ "keywords": [
@ -35,12 +35,12 @@
"test": "mocha test" "test": "mocha test"
}, },
"dependencies": { "dependencies": {
"async": "2.6.2", "async": "3.1.0",
"lodash": "^4.17.11" "lodash": "4.17.15"
}, },
"devDependencies": { "devDependencies": {
"grunt": "^1.0.3", "grunt": "^1.0.3",
"grunt-bump": "0.8.0", "grunt-bump": "0.8.0",
"mocha": "^6.0.2" "mocha": "6.2.0"
} }
} }

View File

@ -16,7 +16,7 @@ describe('airport', () => {
assert.ok(info); assert.ok(info);
assert.equal(info.length, 36); assert.equal(info.length, 36);
var ap = info[0]; let ap = info[0];
assert.equal(ap.mac, '00:35:1a:90:56:03'); assert.equal(ap.mac, '00:35:1a:90:56:03');
assert.equal(ap.ssid, 'OurTest'); assert.equal(ap.ssid, 'OurTest');
assert.equal(ap.rssi, -70); assert.equal(ap.rssi, -70);
@ -49,7 +49,7 @@ describe('airport', () => {
assert.ok(info); assert.ok(info);
assert.equal(info.length, 4); assert.equal(info.length, 4);
var ap = info[0]; let ap = info[0];
assert.equal(ap.mac, '7c:b7:33:ae:3b:06'); assert.equal(ap.mac, '7c:b7:33:ae:3b:06');
assert.equal(ap.ssid, 'Raupo'); assert.equal(ap.ssid, 'Raupo');
assert.equal(ap.rssi, -80); assert.equal(ap.rssi, -80);

View File

@ -22,7 +22,7 @@ describe('iwlist', () => {
assert.ok(info); assert.ok(info);
var ap = info[0]; let ap = info[0];
assert.equal(ap.mac, 'D4:D1:84:50:76:45'); assert.equal(ap.mac, 'D4:D1:84:50:76:45');
assert.equal(ap.ssid, 'gsy-97796'); assert.equal(ap.ssid, 'gsy-97796');
assert.equal(ap.rssi, -76); assert.equal(ap.rssi, -76);
@ -40,7 +40,7 @@ describe('iwlist', () => {
iwlist.parseOutput(fs.readFileSync(path.join(__dirname, 'fixtures','iwlist','iwlist03_raspi.txt'), { encoding: 'utf8' }), (err, info) => { iwlist.parseOutput(fs.readFileSync(path.join(__dirname, 'fixtures','iwlist','iwlist03_raspi.txt'), { encoding: 'utf8' }), (err, info) => {
assert.ok(info); assert.ok(info);
var ap = info[0]; let ap = info[0];
assert.equal(ap.mac, '00:35:1A:90:56:00'); assert.equal(ap.mac, '00:35:1A:90:56:00');
assert.equal(ap.ssid, 'LORA-Wifi'); assert.equal(ap.ssid, 'LORA-Wifi');
assert.equal(ap.rssi, -71); assert.equal(ap.rssi, -71);

View File

@ -16,7 +16,7 @@ describe('netsh', function () {
assert.ok(info); assert.ok(info);
assert.equal(info.length, 86); assert.equal(info.length, 86);
var ap = info[0]; let ap = info[0];
assert.equal(ap.mac, '00:f2:8b:8c:a6:88'); assert.equal(ap.mac, '00:f2:8b:8c:a6:88');
assert.equal(ap.ssid, ''); assert.equal(ap.ssid, '');
assert.equal(ap.rssi, -88.5); assert.equal(ap.rssi, -88.5);
@ -55,7 +55,7 @@ describe('netsh', function () {
assert.ok(info); assert.ok(info);
assert.equal(info.length, 86); assert.equal(info.length, 86);
var ap = info[0]; let ap = info[0];
assert.equal(ap.mac, '00:f2:8b:8c:a6:88'); assert.equal(ap.mac, '00:f2:8b:8c:a6:88');
assert.equal(ap.ssid, ''); assert.equal(ap.ssid, '');
assert.equal(ap.rssi, -88.5); assert.equal(ap.rssi, -88.5);
@ -94,7 +94,7 @@ describe('netsh', function () {
assert.ok(info); assert.ok(info);
assert.equal(info.length, 8); assert.equal(info.length, 8);
var ap = info[0]; let ap = info[0];
assert.equal(ap.mac, '98:fc:11:b6:88:9e'); assert.equal(ap.mac, '98:fc:11:b6:88:9e');
assert.equal(ap.ssid, 'CARAMANZANAS_BAJA'); assert.equal(ap.ssid, 'CARAMANZANAS_BAJA');
assert.equal(ap.rssi, -86); assert.equal(ap.rssi, -86);