如何使用JavaScript或jQuery获取cmd中ipconfig返回的本地系统IP
为什么之前的方案无法获取ipconfig对应的本地IP
- 第一种geoip接口方案:返回的是当前网络的公网出口IP,和ipconfig里的内网网卡IP属于完全不同的网络地址范畴,自然匹配不上
- 第二种JSP服务端脚本方案:
request.getRemoteAddr()获取的是客户端访问服务器时的路由出口IP,request.getLocalAddr()是服务器自身的网卡IP,都无法拿到客户端本地的网卡真实IP - 第三种WebRTC方案:目前Chrome、Edge、Firefox等主流浏览器都默认开启了WebRTC本地IP匿名化策略,会把真实内网IP替换成mDNS域名,所以原有正则匹配只能拿到无效伪地址或者无结果
可行实现方案
分不同运行环境对应不同方案:
场景1:普通浏览器端公共网页
无用户主动授权的前提下无法直接获取ipconfig返回的本地网卡IP,这是浏览器安全沙箱的硬性限制,避免恶意网页窃取用户内网环境信息。如果是可控使用场景,可以将站点加入浏览器可信列表,手动关闭当前站点的WebRTC IP匿名化限制,调整后的WebRTC代码即可正常抓取本地IP:
window.RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection; const getLocalIP = () => { return new Promise((resolve) => { const pc = new RTCPeerConnection({ iceServers: [] }); pc.createDataChannel(''); pc.createOffer().then(offer => pc.setLocalDescription(offer)); pc.onicecandidate = (e) => { if (!e.candidate) return; const ipMatch = e.candidate.candidate.match(/([0-9]{1,3}(\.[0-9]{1,3}){3})/); if (ipMatch) { resolve(ipMatch[1]); pc.onicecandidate = () => {}; pc.close(); } }; }); }; // 调用示例 getLocalIP().then(ip => console.log('本地IP:', ip));
场景2:Node.js/Electron等非浏览器沙箱环境
可以直接调用系统原生API获取网卡信息,返回结果和ipconfig完全一致:
// Node.js环境代码示例 const os = require('os'); const networkInterfaces = os.networkInterfaces(); const localIPs = []; // 遍历所有网卡过滤出可用内网IPv4地址 Object.values(networkInterfaces).forEach(interfaces => { interfaces.forEach(iface => { if (iface.family === 'IPv4' && !iface.internal) { localIPs.push(iface.address); } }); }); console.log('本地网卡IP列表:', localIPs);
内容的提问来源于stack exchange,提问作者balaji
相关产品推荐
相关产品推荐

