diff --git a/CHANGELOG.md b/CHANGELOG.md index 39e2e2e..6db9f9a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ For major (breaking) changes - version 3 and 2 see end of page. | Version | Date | Comment | | -------------- | -------------- | -------- | +| 4.34.6 | 2020-01-12 | `networkInterfaces()` catch errors | | 4.34.5 | 2020-01-07 | `networkInterfaceDefault()` fixed CMD popup (windows) | | 4.34.4 | 2020-01-06 | `system()` fixed vitrual catch error | | 4.34.3 | 2020-01-06 | `graphics()` fixed non nvidia-smi controllers (win) | diff --git a/docs/history.html b/docs/history.html index 55eb480..e0a6531 100644 --- a/docs/history.html +++ b/docs/history.html @@ -83,6 +83,11 @@ + + 4.34.6 + 2020-01-12 + networkInterfaces() catch errors + 4.34.5 2020-01-07 @@ -2059,4 +2064,4 @@ - \ No newline at end of file + diff --git a/docs/index.html b/docs/index.html index 2d83469..1bb0e77 100644 --- a/docs/index.html +++ b/docs/index.html @@ -169,7 +169,7 @@
systeminformation
-
Current Version: 4.34.5
+
Current Version: 4.34.6
@@ -208,7 +208,7 @@
Downloads last month
-
366
+
367
Dependents
diff --git a/lib/network.js b/lib/network.js index 90b49e1..8c813c6 100644 --- a/lib/network.js +++ b/lib/network.js @@ -685,132 +685,133 @@ function networkInterfaces(callback, rescan = true) { } return new Promise((resolve) => { process.nextTick(() => { - let ifaces = os.networkInterfaces(); - let result = []; let nics = []; let dnsSuffixes = []; let nics8021xInfo = []; - // seperate handling in OSX - if (_darwin || _freebsd || _openbsd || _netbsd) { - nics = getDarwinNics(); + try { + let ifaces = os.networkInterfaces(); + + // seperate handling in OSX + if (_darwin || _freebsd || _openbsd || _netbsd) { + nics = getDarwinNics(); - nics.forEach(nic => { + nics.forEach(nic => { - if ({}.hasOwnProperty.call(ifaces, nic.iface)) { - ifaces[nic.iface].forEach(function (details) { - if (details.family === 'IPv4') { - nic.ip4subnet = details.netmask; - } - if (details.family === 'IPv6') { - nic.ip6subnet = details.netmask; - } + if ({}.hasOwnProperty.call(ifaces, nic.iface)) { + ifaces[nic.iface].forEach(function (details) { + if (details.family === 'IPv4') { + nic.ip4subnet = details.netmask; + } + if (details.family === 'IPv6') { + nic.ip6subnet = details.netmask; + } + }); + } + + result.push({ + iface: nic.iface, + ifaceName: nic.iface, + ip4: nic.ip4, + ip4subnet: nic.ip4subnet || '', + ip6: nic.ip6, + ip6subnet: nic.ip6subnet || '', + mac: nic.mac, + internal: nic.internal, + virtual: nic.internal ? false : testVirtualNic(nic.iface, nic.iface, nic.mac), + operstate: nic.operstate, + type: nic.type, + duplex: nic.duplex, + mtu: nic.mtu, + speed: nic.speed, + dhcp: getDarwinIfaceDHCPstatus(nic.iface), + dnsSuffix: '', + ieee8021xAuth: '', + ieee8021xState: '', + carrierChanges: 0 }); - } - - result.push({ - iface: nic.iface, - ifaceName: nic.iface, - ip4: nic.ip4, - ip4subnet: nic.ip4subnet || '', - ip6: nic.ip6, - ip6subnet: nic.ip6subnet || '', - mac: nic.mac, - internal: nic.internal, - virtual: nic.internal ? false : testVirtualNic(nic.iface, nic.iface, nic.mac), - operstate: nic.operstate, - type: nic.type, - duplex: nic.duplex, - mtu: nic.mtu, - speed: nic.speed, - dhcp: getDarwinIfaceDHCPstatus(nic.iface), - dnsSuffix: '', - ieee8021xAuth: '', - ieee8021xState: '', - carrierChanges: 0 }); - }); - _networkInterfaces = result; - if (callback) { callback(result); } - resolve(result); - } else { - if ((JSON.stringify(ifaces) === JSON.stringify(_ifaces)) && !rescan) { - // no changes - just return object - result = _networkInterfaces; - + _networkInterfaces = result; if (callback) { callback(result); } resolve(result); } else { - _ifaces = Object.assign({}, ifaces); + if ((JSON.stringify(ifaces) === JSON.stringify(_ifaces)) && !rescan) { + // no changes - just return object + result = _networkInterfaces; + + if (callback) { callback(result); } + resolve(result); + } else { + _ifaces = Object.assign({}, ifaces); + + if (_windows) { + nics = getWindowsNics(); + nics.forEach(nic => { + let found = false; + Object.keys(ifaces).forEach(key => { + if (!found) { + ifaces[key].forEach(value => { + if (Object.keys(value).indexOf('mac') >= 0) { + found = value['mac'] === nic.mac; + } + }); + } + }); - if (_windows) { - nics = getWindowsNics(); - nics.forEach(nic => { - let found = false; - Object.keys(ifaces).forEach(key => { if (!found) { - ifaces[key].forEach(value => { - if (Object.keys(value).indexOf('mac') >= 0) { - found = value['mac'] === nic.mac; + ifaces[nic.name] = [{ mac: nic.mac }]; + } + }); + + nics8021xInfo = getWindowsWiredProfilesInformation(); + dnsSuffixes = getWindowsDNSsuffixes(); + } + if (_linux) { + _dhcpNics = getLinuxDHCPNics(); + } + for (let dev in ifaces) { + let ip4 = ''; + let ip4subnet = ''; + let ip6 = ''; + let ip6subnet = ''; + let mac = ''; + let duplex = ''; + let mtu = ''; + let speed = -1; + let carrierChanges = 0; + let operstate = 'down'; + let dhcp = false; + let dnsSuffix = ''; + let ieee8021xAuth = ''; + let ieee8021xState = ''; + let type = ''; + + if ({}.hasOwnProperty.call(ifaces, dev)) { + let ifaceName = dev; + ifaces[dev].forEach(function (details) { + if (details.family === 'IPv4') { + ip4 = details.address; + ip4subnet = details.netmask; + } + if (details.family === 'IPv6') { + if (!ip6 || ip6.match(/^fe80::/i)) { + ip6 = details.address; + ip6subnet = details.netmask; } - }); - } - }); - - if (!found) { - ifaces[nic.name] = [{ mac: nic.mac }]; - } - }); - - nics8021xInfo = getWindowsWiredProfilesInformation(); - dnsSuffixes = getWindowsDNSsuffixes(); - } - if (_linux) { - _dhcpNics = getLinuxDHCPNics(); - } - for (let dev in ifaces) { - let ip4 = ''; - let ip4subnet = ''; - let ip6 = ''; - let ip6subnet = ''; - let mac = ''; - let duplex = ''; - let mtu = ''; - let speed = -1; - let carrierChanges = 0; - let operstate = 'down'; - let dhcp = false; - let dnsSuffix = ''; - let ieee8021xAuth = ''; - let ieee8021xState = ''; - let type = ''; - - if ({}.hasOwnProperty.call(ifaces, dev)) { - let ifaceName = dev; - ifaces[dev].forEach(function (details) { - if (details.family === 'IPv4') { - ip4 = details.address; - ip4subnet = details.netmask; - } - if (details.family === 'IPv6') { - if (!ip6 || ip6.match(/^fe80::/i)) { - ip6 = details.address; - ip6subnet = details.netmask; } - } - mac = details.mac; - // fallback due to https://github.com/nodejs/node/issues/13581 (node 8.1 - node 8.2) - if (mac.indexOf('00:00:0') > -1 && (_linux || _darwin) && parseInt(process.versions.node.split('.'), 10) === 8) { - if (Object.keys(_mac).length === 0) { - _mac = getMacAddresses(); + mac = details.mac; + // fallback due to https://github.com/nodejs/node/issues/13581 (node 8.1 - node 8.2) + if (mac.indexOf('00:00:0') > -1 && (_linux || _darwin) && parseInt(process.versions.node.split('.'), 10) === 8) { + if (Object.keys(_mac).length === 0) { + _mac = getMacAddresses(); + } + mac = _mac[dev] || ''; } - mac = _mac[dev] || ''; - } - }); - if (_linux) { - let iface = dev.split(':')[0].trim().toLowerCase(); - const cmd = `echo -n "addr_assign_type: "; cat /sys/class/net/${iface}/addr_assign_type 2>/dev/null; echo; + }); + if (_linux) { + let iface = dev.split(':')[0].trim().toLowerCase(); + const cmd = `echo -n "addr_assign_type: "; cat /sys/class/net/${iface}/addr_assign_type 2>/dev/null; echo; echo -n "address: "; cat /sys/class/net/${iface}/address 2>/dev/null; echo; echo -n "addr_len: "; cat /sys/class/net/${iface}/addr_len 2>/dev/null; echo; echo -n "broadcast: "; cat /sys/class/net/${iface}/broadcast 2>/dev/null; echo; @@ -836,86 +837,90 @@ function networkInterfaces(callback, rescan = true) { echo -n "wireless: "; cat /proc/net/wireless 2>/dev/null \| grep ${iface}; echo; echo -n "wirelessspeed: "; iw dev ${iface} link 2>&1 \| grep bitrate; echo;`; - let lines = []; - try { - lines = execSync(cmd).toString().split('\n'); - const connectionName = getLinuxIfaceConnectionName(iface); - dhcp = getLinuxIfaceDHCPstatus(iface, connectionName, _dhcpNics); - dnsSuffix = getLinuxIfaceDNSsuffix(connectionName); - ieee8021xAuth = getLinuxIfaceIEEE8021xAuth(connectionName); - ieee8021xState = getLinuxIfaceIEEE8021xState(ieee8021xAuth); - } catch (e) { - util.noop(); - } - duplex = util.getValue(lines, 'duplex'); - duplex = duplex.startsWith('cat') ? '' : duplex; - mtu = parseInt(util.getValue(lines, 'mtu'), 10); - let myspeed = parseInt(util.getValue(lines, 'speed'), 10); - speed = isNaN(myspeed) ? -1 : myspeed; - let wirelessspeed = util.getValue(lines, 'wirelessspeed').split('tx bitrate: '); - if (speed === -1 && wirelessspeed.length === 2) { - myspeed = parseFloat(wirelessspeed[1]); - speed = isNaN(myspeed) ? -1 : myspeed; - } - carrierChanges = parseInt(util.getValue(lines, 'carrier_changes'), 10); - operstate = util.getValue(lines, 'operstate'); - type = operstate === 'up' ? (util.getValue(lines, 'wireless').trim() ? 'wireless' : 'wired') : 'unknown'; - if (iface === 'lo' || iface.startsWith('bond')) { type = 'virtual'; } - } - if (_windows) { - - - dnsSuffix = getWindowsIfaceDNSsuffix(dnsSuffixes.ifaces, dev); - nics.forEach(detail => { - if (detail.mac === mac) { - ifaceName = detail.name; - dhcp = detail.dhcp; - operstate = detail.operstate; - speed = detail.speed; - type = detail.type; + let lines = []; + try { + lines = execSync(cmd).toString().split('\n'); + const connectionName = getLinuxIfaceConnectionName(iface); + dhcp = getLinuxIfaceDHCPstatus(iface, connectionName, _dhcpNics); + dnsSuffix = getLinuxIfaceDNSsuffix(connectionName); + ieee8021xAuth = getLinuxIfaceIEEE8021xAuth(connectionName); + ieee8021xState = getLinuxIfaceIEEE8021xState(ieee8021xAuth); + } catch (e) { + util.noop(); } - }); - - if (dev.toLowerCase().indexOf('wlan') >= 0 || ifaceName.toLowerCase().indexOf('wlan') >= 0 || ifaceName.toLowerCase().indexOf('802.11n') >= 0 || ifaceName.toLowerCase().indexOf('wireless') >= 0 || ifaceName.toLowerCase().indexOf('wi-fi') >= 0 || ifaceName.toLowerCase().indexOf('wifi') >= 0) { - type = 'wireless'; + duplex = util.getValue(lines, 'duplex'); + duplex = duplex.startsWith('cat') ? '' : duplex; + mtu = parseInt(util.getValue(lines, 'mtu'), 10); + let myspeed = parseInt(util.getValue(lines, 'speed'), 10); + speed = isNaN(myspeed) ? -1 : myspeed; + let wirelessspeed = util.getValue(lines, 'wirelessspeed').split('tx bitrate: '); + if (speed === -1 && wirelessspeed.length === 2) { + myspeed = parseFloat(wirelessspeed[1]); + speed = isNaN(myspeed) ? -1 : myspeed; + } + carrierChanges = parseInt(util.getValue(lines, 'carrier_changes'), 10); + operstate = util.getValue(lines, 'operstate'); + type = operstate === 'up' ? (util.getValue(lines, 'wireless').trim() ? 'wireless' : 'wired') : 'unknown'; + if (iface === 'lo' || iface.startsWith('bond')) { type = 'virtual'; } } + if (_windows) { - const IEEE8021x = getWindowsIEEE8021x(type, dev, nics8021xInfo); - ieee8021xAuth = IEEE8021x.protocol; - ieee8021xState = IEEE8021x.state; + + dnsSuffix = getWindowsIfaceDNSsuffix(dnsSuffixes.ifaces, dev); + nics.forEach(detail => { + if (detail.mac === mac) { + ifaceName = detail.name; + dhcp = detail.dhcp; + operstate = detail.operstate; + speed = detail.speed; + type = detail.type; + } + }); + + if (dev.toLowerCase().indexOf('wlan') >= 0 || ifaceName.toLowerCase().indexOf('wlan') >= 0 || ifaceName.toLowerCase().indexOf('802.11n') >= 0 || ifaceName.toLowerCase().indexOf('wireless') >= 0 || ifaceName.toLowerCase().indexOf('wi-fi') >= 0 || ifaceName.toLowerCase().indexOf('wifi') >= 0) { + type = 'wireless'; + } + + const IEEE8021x = getWindowsIEEE8021x(type, dev, nics8021xInfo); + ieee8021xAuth = IEEE8021x.protocol; + ieee8021xState = IEEE8021x.state; + } + let internal = (ifaces[dev] && ifaces[dev][0]) ? ifaces[dev][0].internal : false; + if (dev.toLowerCase().indexOf('loopback') > -1 || ifaceName.toLowerCase().indexOf('loopback') > -1) { + internal = true; + } + const virtual = internal ? false : testVirtualNic(dev, ifaceName, mac); + result.push({ + iface: dev, + ifaceName, + ip4, + ip4subnet, + ip6, + ip6subnet, + mac, + internal, + virtual, + operstate, + type, + duplex, + mtu, + speed, + dhcp, + dnsSuffix, + ieee8021xAuth, + ieee8021xState, + carrierChanges, + }); } - let internal = (ifaces[dev] && ifaces[dev][0]) ? ifaces[dev][0].internal : false; - if (dev.toLowerCase().indexOf('loopback') > -1 || ifaceName.toLowerCase().indexOf('loopback') > -1) { - internal = true; - } - const virtual = internal ? false : testVirtualNic(dev, ifaceName, mac); - result.push({ - iface: dev, - ifaceName, - ip4, - ip4subnet, - ip6, - ip6subnet, - mac, - internal, - virtual, - operstate, - type, - duplex, - mtu, - speed, - dhcp, - dnsSuffix, - ieee8021xAuth, - ieee8021xState, - carrierChanges, - }); } + _networkInterfaces = result; + if (callback) { callback(result); } + resolve(result); } - _networkInterfaces = result; - if (callback) { callback(result); } - resolve(result); } + } catch (e) { + if (callback) { callback(result); } + resolve(result); } }); });