我正在使用以下代码在我的电子应用程序中检索客户端IP:
const fnOSIP = () => { const nets = networkInterfaces();const fnOSIP= Object.create(null);//或者只有'{}',一个空对象
for (const name of Object.keys(nets)) {
for (const net of nets[name]) {
// skip over non-ipv4 and internal (i.e. 127.0.0.1) addresses
if (net.family === 'IPv4' && !net.internal) {
if (!results[name]) {
results[name] = [];
}
results[name].push(net.address);
}
}
}
return results;
}问题是它返回了两个IP,我想获取主IP,但不是很确定。

如果我执行一条命令: ip address,我可以获得每个IP的以下信息:
3: wlp0s20f3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 08:d2:3e:a5:46:37 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.117/24 brd 192.168.0.255 scope global dynamic noprefixroute wlp0s20f3
valid_lft 4944sec preferred_lft 4944sec
inet6 fe80::7701:3d92:db95:9fdc/64 scope link noprefixroute
valid_lft forever preferred_lft forever
16: br-f5f2e5a5a382: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:23:09:cb:c9 brd ff:ff:ff:ff:ff:ff
inet 172.19.0.1/16 brd 172.19.255.255 scope global br-f5f2e5a5a382
valid_lft forever preferred_lft forever
inet6 fe80::42:23ff:fe09:cbc9/64 scope link
valid_lft forever preferred_lft foreverbr-f5f2...来自docker:
假设如果它有/24,它就是主要的,这有意义吗?
发布于 2021-01-13 18:23:54
问题是,您必须剥离内部地址。我使用以下脚本来确定客户端的IP:
function getIPs() {
var ifaces = os.networkInterfaces();
let ipAdresse = {};
Object.keys(ifaces).forEach(function (ifname) {
let alias = 0;
ifaces[ifname].forEach(function (iface) {
if ('IPv4' !== iface.family || iface.internal !== false) {
// skip over internal (i.e. 127.0.0.1) and non-ipv4 addresses
return;
}
if (alias >= 1) {
// this single interface has multiple ipv4 addresses
console.log(ifname + ':' + alias, iface.address);
} else {
// this interface has only one ipv4 adress
console.log(ifname, iface.address);
ipAdresse = {IP: iface.address, MAC: iface.mac};
}
++alias;
});
});
return ipAdresse;
}问题(我找不到解决方案)是,如果机器有两个接口(像LAN和WIFI同时启用),你不能确定哪个是哪个。
https://stackoverflow.com/questions/65695595
复制相似问题