improved default network interface
This commit is contained in:
+41
-11
@@ -80,6 +80,7 @@
|
||||
// --------------------------------
|
||||
//
|
||||
// version date comment
|
||||
// 3.4.2 2016-09-01 improved default network interface
|
||||
// 3.4.1 2016-08-30 updated docs
|
||||
// 3.4.0 2016-08-30 rewritten current process cpu usage (linux)
|
||||
// 3.3.0 2016-08-24 added process list
|
||||
@@ -115,6 +116,7 @@
|
||||
|
||||
const os = require('os')
|
||||
, exec = require('child_process').exec
|
||||
, execSync = require('child_process').execSync
|
||||
, fs = require('fs')
|
||||
, lib_version = require('../package.json').version;
|
||||
|
||||
@@ -1162,23 +1164,51 @@ exports.disksIO = disksIO;
|
||||
// 8. Network
|
||||
// ----------------------------------------------------------------------------------
|
||||
|
||||
function getFirstExternalNetworkInterface() {
|
||||
function getDefaultNetworkInterface() {
|
||||
|
||||
let ifacename = '';
|
||||
let ifaces = os.networkInterfaces();
|
||||
let cmd = (_linux ? "route | grep default | awk '{print $8}'" : "route get 0.0.0.0 2>/dev/null | grep interface: | awk '{print $2}'");
|
||||
let result = execSync(cmd);
|
||||
ifacename = result.toString().split('\n')[0];
|
||||
|
||||
for (let dev in ifaces) {
|
||||
if (ifaces.hasOwnProperty(dev)) {
|
||||
ifaces[dev].forEach(function (details) {
|
||||
if (details && details.internal == false) {
|
||||
ifacename = ifacename || dev;
|
||||
}
|
||||
})
|
||||
if (!ifacename) { // fallback - "first" external interface
|
||||
const sortObject = o => Object.keys(o).sort().reduce((r, k) => (r[k] = o[k], r), {});
|
||||
|
||||
let ifaces = sortObject(os.networkInterfaces());
|
||||
|
||||
for (let dev in ifaces) {
|
||||
if (ifaces.hasOwnProperty(dev)) {
|
||||
ifaces[dev].forEach(function (details) {
|
||||
if (details && details.internal == false) {
|
||||
ifacename = ifacename || dev;
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ifacename) _default_iface = ifacename;
|
||||
return ifacename;
|
||||
}
|
||||
|
||||
function networkInterfaceDefault(callback) {
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
process.nextTick(() => {
|
||||
if (_windows) {
|
||||
let error = new Error(NOT_SUPPORTED);
|
||||
if (callback) { callback(NOT_SUPPORTED) }
|
||||
reject(error);
|
||||
}
|
||||
|
||||
let result = getDefaultNetworkInterface();
|
||||
if (callback) { callback(result) }
|
||||
resolve(result);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
exports.networkInterfaceDefault = networkInterfaceDefault;
|
||||
|
||||
// --------------------------
|
||||
// NET - interfaces
|
||||
|
||||
@@ -1258,7 +1288,7 @@ function networkStats(iface, callback) {
|
||||
reject(error);
|
||||
}
|
||||
|
||||
_default_iface = _default_iface || getFirstExternalNetworkInterface();
|
||||
_default_iface = _default_iface || getDefaultNetworkInterface();
|
||||
iface = iface || _default_iface; // (_darwin ? 'en0' : 'eth0');
|
||||
|
||||
let result = {
|
||||
@@ -2647,7 +2677,7 @@ function getDynamicData(srv, iface, callback) {
|
||||
reject(error);
|
||||
}
|
||||
|
||||
iface = iface || getFirstExternalNetworkInterface();
|
||||
iface = iface || getDefaultNetworkInterface();
|
||||
srv = srv || '';
|
||||
|
||||
// use closure to track ƒ completion
|
||||
|
||||
Reference in New Issue
Block a user