如何在Node.js中获取设备当前活跃的本地IPv4地址?
在Node.js中准确获取当前活跃的本地IPv4地址
方法一:基于系统网络接口的精准过滤(适合已知目标网段)
如果你的路由器固定分配10.x.x.x段的IP,可以直接遍历系统接口,筛选出符合条件的活跃IPv4:
const os = require('os'); function getActiveLocalIP(targetSubnet = '10.') { const interfaces = os.networkInterfaces(); for (const ifaceName of Object.keys(interfaces)) { const addresses = interfaces[ifaceName]; for (const addr of addresses) { // 过滤IPv4、非回环地址、匹配目标网段 if (addr.family === 'IPv4' && !addr.internal && addr.address.startsWith(targetSubnet)) { return addr.address; } } } // 兜底方案:回退到ip模块的默认方法 return require('ip').address(); } // 使用示例 console.log(getActiveLocalIP()); // 输出当前活跃的10.x.x.x段IP
代码说明
os.networkInterfaces():获取设备所有网络接口的详细配置- 核心过滤逻辑:
- 仅保留IPv4类型地址
- 排除回环地址(如127.0.0.1)
- 精准匹配路由器分配的网段(此处为
10.开头)
- 未找到匹配IP时,用
ip模块的默认方法作为兜底
方法二:基于UDP套接字的通用方法(自动识别当前路由IP)
如果需要适配任意网络环境,无需提前知道网段,可以通过临时UDP套接字获取系统当前对外通信的活跃IP:
function getCurrentActiveIP() { return new Promise((resolve, reject) => { const dgram = require('dgram'); const socket = dgram.createSocket('udp4'); socket.on('error', (err) => { socket.close(); reject(err); }); // 连接到外部公网IP(无需实际发送数据) socket.connect(80, '8.8.8.8', () => { const address = socket.address(); socket.close(); resolve(address.address); }); }); } // 使用示例 getCurrentActiveIP().then(ip => { console.log('当前活跃IP:', ip); }).catch(err => { console.error('获取IP失败:', err); });
代码说明
- 创建UDP套接字并连接到公网地址(此处用谷歌DNS的8.8.8.8),无需实际传输数据
socket.address()返回的本地IP,就是系统当前路由优先使用的活跃IP- 该方法不依赖接口名称或网段,自动适配WiFi、以太网等不同连接方式
针对你的场景的优化建议
由于你的设备仅能识别10.x.x.x段IP,推荐优先使用方法一,直接锁定目标网段,避免误选闲置适配器的IP。如果需要适配更多网络环境,可以结合方法二做兜底逻辑。
内容的提问来源于stack exchange,提问作者simplexshotz
相关产品推荐
相关产品推荐

