44 lines
1.4 KiB
JavaScript
44 lines
1.4 KiB
JavaScript
var os = require('os');
|
|
|
|
// Retrieves all interfaces that do feature some non-internal address.
|
|
// This function does NOT employ caching as to reflect the current state
|
|
// of the machine accurately.
|
|
module.exports = function () {
|
|
var allAddresses = {};
|
|
|
|
try {
|
|
var ifaces = os.networkInterfaces();
|
|
} catch (e) {
|
|
// At October 2016 WSL does not support os.networkInterfaces() and throws
|
|
// Return empty object as if no interfaces were found
|
|
// https://github.com/Microsoft/BashOnWindows/issues/468
|
|
if (e.syscall === 'uv_interface_addresses') {
|
|
return allAddresses;
|
|
} else {
|
|
throw e;
|
|
}
|
|
}
|
|
|
|
Object.keys(ifaces).forEach(function (iface) {
|
|
var addresses = {};
|
|
var hasAddresses = false;
|
|
ifaces[iface].forEach(function (address) {
|
|
if (!address.internal) {
|
|
var family = (typeof address.family === 'number')
|
|
? ("ipv" + address.family)
|
|
: (address.family || "").toLowerCase();
|
|
addresses[family] = address.address;
|
|
hasAddresses = true;
|
|
if (address.mac && address.mac !== '00:00:00:00:00:00') {
|
|
addresses.mac = address.mac;
|
|
}
|
|
}
|
|
});
|
|
if (hasAddresses) {
|
|
allAddresses[iface] = addresses;
|
|
}
|
|
});
|
|
return allAddresses;
|
|
};
|
|
|