如何获取同一局域网内运行Express服务器的设备私有IP(Electron环境)
获取同一Wi-Fi下Electron服务器的私有IP方法
以下是几种在Electron环境中获取设备私有IP的实用方案,适配跨平台场景:
方法1:使用Node.js内置os模块解析网络接口
Electron基于Node.js,可直接调用os模块遍历本机网络接口,筛选出Wi-Fi对应的私有IPv4地址:
const os = require('os'); function getPrivateIP() { const interfaces = os.networkInterfaces(); for (const name of Object.keys(interfaces)) { for (const iface of interfaces[name]) { // 跳过IPv6和回环地址 if (iface.family !== 'IPv4' || iface.internal) continue; // 匹配私有IP段:192.168.x.x / 10.x.x.x / 172.16-31.x.x if (/^(192\.168|10\.|172\.(1[6-9]|2[0-9]|3[0-1]))\./.test(iface.address)) { return iface.address; } } } return '127.0.0.1'; // fallback到本地回环 } // 使用示例 const serverIP = getPrivateIP(); console.log(`服务器私有IP: ${serverIP}`);
这个方法无需依赖外部工具,纯Node.js实现,跨平台兼容性好。
方法2:调用系统命令解析输出
针对不同平台执行系统网络命令,提取私有IP:
const { exec } = require('child_process'); const os = require('os'); function getPrivateIPViaCmd(callback) { const platform = os.platform(); let cmd = ''; if (platform === 'win32') { cmd = 'ipconfig | findstr /R /C:"IPv4 Address.*[0-9].[0-9].[0-9].[0-9]"'; } else if (platform === 'darwin') { cmd = 'ifconfig | grep "inet " | grep -v 127.0.0.1 | awk "{print $2}"'; } else if (platform === 'linux') { cmd = 'ip addr show | grep "inet " | grep -v 127.0.0.1 | awk "{print $2}" | cut -d/ -f1'; } exec(cmd, (error, stdout) => { if (error) { callback('127.0.0.1'); return; } // 提取第一个有效私有IP const ipList = stdout.trim().split('\n').filter(ip => /^(192\.168|10\.|172\.(1[6-9]|2[0-9]|3[0-1]))\./.test(ip)); callback(ipList[0] || '127.0.0.1'); }); } // 使用示例 getPrivateIPViaCmd((serverIP) => { console.log(`服务器私有IP: ${serverIP}`); });
注意:这个方法依赖系统命令,需确保Electron应用有足够权限执行终端命令。
额外提示
- 服务器已绑定
0.0.0.0,说明已监听所有可用网卡,只要客户端和服务器在同一Wi-Fi下,使用上述方法获取的私有IP加上服务器端口(如http://${serverIP}:3000/api)即可正常调用API。 - 如果存在多个网卡(如同时连有线和Wi-Fi),建议优先筛选Wi-Fi接口的IP(可通过接口名称判断,比如Windows的"WLAN"、macOS的"en0"、Linux的"wlan0")。
内容的提问来源于stack exchange,提问作者Gaurav Bordoloi
相关产品推荐
相关产品推荐

