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; };