首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >电子客户端IP

电子客户端IP
EN

Stack Overflow用户
提问于 2021-01-13 12:15:15
回答 1查看 103关注 0票数 0

我正在使用以下代码在我的电子应用程序中检索客户端IP:

const fnOSIP = () => { const nets = networkInterfaces();const fnOSIP= Object.create(null);//或者只有'{}',一个空对象

代码语言:javascript
复制
    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的以下信息:

代码语言:javascript
复制
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 forever

br-f5f2...来自docker:

假设如果它有/24,它就是主要的,这有意义吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-13 18:23:54

问题是,您必须剥离内部地址。我使用以下脚本来确定客户端的IP:

代码语言:javascript
复制
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同时启用),你不能确定哪个是哪个。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65695595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档