JS 获取内网 IP 地址(兼容谷歌浏览器)

获取内网 IP 地址

function getIpAddress() {
    window.RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
    var pc = new RTCPeerConnection({
        iceServers: []
    }),
    noop = function() {};
    pc.createDataChannel(''); //create a bogus data channel 
    pc.createOffer(pc.setLocalDescription.bind(pc), noop); // create offer andsetlocaldescription
    pc.onicecandidate = function(ice) {
        if (ice && ice.candidate && ice.candidate.candidate) {
            var myIP = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/.exec(ice.candidate.candidate)[1];
            console.log('my IP: ', myIP); //【注:Chrome浏览器下ice.candidate.address也可以拿到值,火狐浏览器不可以】
            pc.onicecandidate = noop;
			return myIP;
        }
    };
	return null;
}

谷歌浏览器设置

针对谷歌浏览器的设置,才能显出出 IP:(Chrome 91 版本之后,取消了该配置)

  1. 在 chrome 浏览器地址栏中输入:chrome://flags/
  2. 搜索 #enable-webrtc-hide-local-ips-with-mdns 该配置 并将属性改为 disabled
  3. 点击页面下方的 relaunch ,重启浏览器即可查看到本机的内网 IP 地址。

如下图所示:

image-20210301103332557

火狐浏览器设置

针对火狐浏览器的设置,才能显出出 IP:

  1. 搜索 about:config
  2. 点击接受风险并继续。
  3. media.peerconnection.ice.obfuscate_host_addresses 置为 false

image-20210304094911768

image-20210304095024850

Chrome 91 之后的设置

配置说明

  1. 下载 Chrome 官方的组策略文件 chrome.adm

    policy_templates\windows\adm\zh-CN\chrome.adm
  2. 搜索本地计算机的组策略配置,并打开。

  3. 在 管理模板 中,右键选择 “添加 / 删除模板”,选择并导入步骤 1 的模板 chrome.adm

    选择管理模板:

    image-20210526143322700

    添加模板:

    image-20210526143449205

    添加完成后,会出现如上图所示的 经典管理模板(ADM)

  4. 选择 配置项:在 WebRTC ICE 候选路径中显示本地 IP 的网址,位置如下所示:

    image-20210526143645999

  5. 双击打开,选择 已启用并选择 显示

    image-20210526143827731

    可以看到 帮助描述中,此配置是替换原先的 chrome://flags/#enable-webrtc-hide-local-ips-with-mdns 配置。

  6. 在显示配置中,添加白名单域名 *domain.com*,注意,域名前后需要加 【*】号。

    如下图所示:

    image-20210526143941700

  7. 重启 Chrome 浏览器,就可以获取到内网 IP 的显示!

参考消息

  • 参考资料:https://support.imperosoftware.com/support/solutions/articles/44001790065-google-chrome-anonymize-local-ips-exposed-by-webrtc-prevents-live-view-in-cloud-console
  • 下载模板:https://support.google.com/chrome/a/answer/187202?hl=en
  • 配置说明:https://admx.help/?Category=Chrome&Policy=Google.Policies.Chrome::WebRtcLocalIpsAllowedUrls#
  • 官方说明:https://cloud.google.com/docs/chrome-enterprise/policies/?policy=WebRtcLocalIpsAllowedUrls