JS 获取电脑本地IP 和 电脑网络IP(外网IP|公网IP)

1、JS 获取电脑本地的IP地址(内网)

function getIP(callback) {
  let recode = {};
  let RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
  if (!RTCPeerConnection) {
    let win = iframe.contentWindow;
    RTCPeerConnection = win.RTCPeerConnection || win.mozRTCPeerConnection || win.webkitRTCPeerConnection;
  }
  //创建实例,生成连接
  let pc = new RTCPeerConnection();
  // 匹配字符串中符合ip地址的字段
  function handleCandidate(candidate) {
    let ip_regexp = /([0-9]{1,3}(\.[0-9]{1,3}){3}|([a-f0-9]{1,4}((:[a-f0-9]{1,4}){7}|:+[a-f0-9]{1,4}){6}))/;
    let ip_isMatch = candidate.match(ip_regexp)[1];
    if (!recode[ip_isMatch]) {
      callback(ip_isMatch);
      recode[ip_isMatch] = true;
    }
  }
  //监听icecandidate事件
  pc.onicecandidate = (ice) => {
    if (ice.candidate) {
      handleCandidate(ice.candidate.candidate);
    }
  };
  //建立一个伪数据的通道
  pc.createDataChannel('');
  pc.createOffer((res) => {
    pc.setLocalDescription(res);
  }, () => {});
 
  //延迟,让一切都能完成
  setTimeout(() => {
    let lines = pc.localDescription.sdp.split('\n');
    lines.forEach(item => {
      if (item.indexOf('a=candidate:') === 0) {
        handleCandidate(item);
      }
    })
  }, 1000);
}
 
getIP(function(ip){
  console.log("得到的本地IP :" + ip); // 192.168.1.80
});

2、通过第三方接口获取电脑在网络上的IP地址(外网)

浏览器不能直接获取本机ip地址,需要调用第三方接口。或者自己提供一个接口来获取。这里提供一个简单的第三方接口来获取ip地址。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>GET IP</title>
</head>
<body>
    <div id="dom"></div>
</body>
</html>
<script src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
<script type="text/javascript">
    console.log(returnCitySN)
    // 下面这行和上面的script一起使用  获取真实IP地址
    document.write(returnCitySN["cip"]+','+returnCitySN["cname"] + "真实IP地址")
</script>

获取本机ip失败,webrtc candidate xxx.local mDNS ip地址问题

谷歌解决办法

搜索chrome://flags/#enable-webrtc-hide-local-ips-with-mdns
Anonymize local IPs exposed by WebRTC置为disabled

据说Google webrtc 的ip地址之前是暴露的,然后有了mDNS功能,把ip地址隐藏了,要获取ip的话,要把mDNS关闭,但是这个插件开关,只在85版本及以前可以找到,86开始就找不到了,更别提关闭,太难了

火狐解决办法

搜索about:config
media.peerconnection.ice.obfuscate_host_addresses置为false

火狐浏览器84版本还是可以找到插件开关的

感谢大佬的分享

https://blog.csdn.net/weixin_43915401/article/details/111830699

posted @ 2023-04-15 21:07  浩浩学习  阅读(3568)  评论(0编辑  收藏  举报