首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js 不连接外网获取内网ip

在 JavaScript 中获取内网 IP 地址通常需要在支持 WebRTC(Web Real-Time Communication)的环境下进行。WebRTC 允许浏览器之间进行实时通信,并在此过程中可能会暴露本地网络信息,包括内网 IP 地址。

基础概念:

  • WebRTC:一种支持网页浏览器进行实时语音对话或视频聊天的技术。
  • STUN(Session Traversal Utilities for NAT)服务器:用于帮助客户端发现自己的公网 IP 地址和端口。
  • ICE(Interactive Connectivity Establishment)框架:用于在 NAT 后的设备之间建立连接。

获取内网 IP 的方法: 可以通过监听 WebRTC 的 icecandidate 事件来获取本地网络信息。

示例代码:

代码语言:txt
复制
function getLocalIPs(callback) {
    const RTCPeerConnection = window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection;
    const ips = {};

    if (!RTCPeerConnection) {
        callback(ips);
        return;
    }

    const rtc = new RTCPeerConnection({ iceServers: [] });
    rtc.createDataChannel('', { reliable: false });

    rtc.onicecandidate = function (ice) {
        if (!ice || !ice.candidate || !ice.candidate.candidate) return;
        const ipMatch = /([0-9]{1,3}(\.[0-9]{1,3}){3})/.exec(ice.candidate.candidate);
        if (ipMatch) {
            const ip = ipMatch[1];
            ips[ip] = true;
            callback(ips);
        }
    };

    rtc.createOffer().then(offer => rtc.setLocalDescription(offer));
}

getLocalIPs(function (ips) {
    console.log('内网 IP 地址:', Object.keys(ips));
});

优势:

  • 不需要连接外网即可获取内网 IP。
  • 可以在客户端直接执行,无需服务器参与。

应用场景:

  • 内部网络管理工具。
  • 局域网内的设备发现和通信。

注意事项:

  • 获取到的 IP 地址可能包括多个,需要根据实际情况筛选。
  • 由于隐私和安全问题,现代浏览器可能会限制或改变 WebRTC 的行为,导致此方法在未来可能不再有效。
  • 用户的网络配置(如 NAT 类型)可能会影响获取到的 IP 地址。

常见问题及解决方法:

  • 无法获取 IP 地址:可能是浏览器不支持 WebRTC 或者安全设置阻止了相关操作。确保使用支持 WebRTC 的浏览器,并检查浏览器的隐私设置。
  • 获取到的 IP 不正确:可能是由于网络配置复杂(如多重 NAT),可以尝试在不同的网络环境下测试。

请注意,由于隐私和安全的原因,未来浏览器可能会进一步限制通过 WebRTC 获取本地 IP 地址的能力。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券