54 lines
1.1 KiB
JavaScript
54 lines
1.1 KiB
JavaScript
'use strict';
|
|
|
|
var os = require('os');
|
|
|
|
module.exports.find = function (opts) {
|
|
opts = opts || {};
|
|
opts.externals = opts.externals || [];
|
|
|
|
var ifaceMap = os.networkInterfaces();
|
|
var newMap = {};
|
|
|
|
Object.keys(ifaceMap).forEach(function (iname) {
|
|
var ifaces = ifaceMap[iname];
|
|
|
|
ifaces = ifaces.filter(function (iface) {
|
|
return opts.externals.some(function (ip) {
|
|
if (ip.address === iface.address) {
|
|
ip.external = true;
|
|
return true;
|
|
}
|
|
}) || (!iface.internal && !/^fe80/.test(iface.address) && !/^[0:]+$/.test(iface.mac));
|
|
});
|
|
|
|
if (!ifaces.length) {
|
|
return;
|
|
}
|
|
|
|
newMap[iname] = newMap[iname] || { ipv4: [], ipv6: [] };
|
|
|
|
ifaces.forEach(function (addr) {
|
|
addr.iface = iname;
|
|
if ('IPv4' === addr.family) {
|
|
newMap[iname].ipv4.push(addr);
|
|
}
|
|
else if ('IPv6' === addr.family) {
|
|
newMap[iname].ipv6.push(addr);
|
|
}
|
|
});
|
|
});
|
|
|
|
return newMap;
|
|
|
|
/*
|
|
https://[2601:681:300:92c0:2477:d58a:d69e:51a0]:8443
|
|
|
|
console.log('');
|
|
|
|
console.log('');
|
|
console.log(iname);
|
|
console.log(ifaces);
|
|
console.log('');
|
|
*/
|
|
};
|