networkInterface() fix secondary and link-local ip

This commit is contained in:
Sebastian Hildebrandt 2025-12-25 08:11:30 +01:00
parent 69b406913e
commit 6b160d9a90

View File

@ -872,18 +872,36 @@ function networkInterfaces(callback, rescan, defaultString) {
let ieee8021xState = ''; let ieee8021xState = '';
let type = ''; let type = '';
let ip4link = '';
let ip4linksubnet = '';
let ip6link = '';
let ip6linksubnet = '';
if ({}.hasOwnProperty.call(ifaces, dev)) { if ({}.hasOwnProperty.call(ifaces, dev)) {
let ifaceName = dev; const ifaceName = dev;
ifaces[dev].forEach(function (details) { ifaces[dev].forEach((details) => {
if (details.family === 'IPv4' || details.family === 4) { if (details.family === 'IPv4' || details.family === 4) {
if (ip4.match(/^169.254/i)) {
ip4link = details.address;
ip4linksubnet = details.netmask;
} else if (!ip4) {
ip4 = details.address;
ip4subnet = details.netmask;
}
}
if (!ip4 && (details.family === 'IPv4' || details.family === 4)) {
ip4 = details.address; ip4 = details.address;
ip4subnet = details.netmask; ip4subnet = details.netmask;
} }
if (details.family === 'IPv6' || details.family === 6) { if (details.family === 'IPv6' || details.family === 6) {
if (!ip6 || ip6.match(/^fe80::/i)) { if (!ip6 && !ip6.match(/^fe80::/i)) {
ip6 = details.address; ip6 = details.address;
ip6subnet = details.netmask; ip6subnet = details.netmask;
} }
if (ip6.match(/^fe80::/i)) {
ip6link = details.address;
ip6linksubnet = details.netmask;
}
} }
mac = details.mac; mac = details.mac;
// fallback due to https://github.com/nodejs/node/issues/13581 (node 8.1 - node 8.2) // fallback due to https://github.com/nodejs/node/issues/13581 (node 8.1 - node 8.2)
@ -895,7 +913,15 @@ function networkInterfaces(callback, rescan, defaultString) {
mac = _mac[dev] || ''; mac = _mac[dev] || '';
} }
}); });
let iface = dev.split(':')[0].trim().toLowerCase(); if (!ip4 && ip4link) {
ip4 = ip4link;
ip4subnet = ip4linksubnet;
}
if (!ip6 && ip6link) {
ip6 = ip6link;
ip6subnet = ip6linksubnet;
}
const iface = dev.split(':')[0].trim().toLowerCase();
let ifaceSanitized = ''; let ifaceSanitized = '';
const s = util.isPrototypePolluted() ? '---' : util.sanitizeShellString(iface); const s = util.isPrototypePolluted() ? '---' : util.sanitizeShellString(iface);
const l = util.mathMin(s.length, 2000); const l = util.mathMin(s.length, 2000);