客户端使用WebRTC获取IP

客户端使用WebRTC获取IP

WebRTC,名称源自网页即时通信(英语:Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的API。它于2011年6月1日开源并在Google、Mozilla、Opera支持下被纳入万维网联盟的W3C推荐标准。

客户端使用WebRTC获取IP:

function getClientIp(callback = function() {}) {
      var PeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection; // compatibility for firefox and chrome
      var pc = new PeerConnection({ iceServers: [] });
      var noop = function() {};
      var localIPs = {};
      var ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g;

      function ipIterate(ip) {
          if (!localIPs[ip]) callback(ip);
          localIPs[ip] = true;
      }
      pc.createDataChannel('');
      pc.createOffer().then(function(sdp) {
          sdp.sdp.split('\n').forEach(function(line) {
              if (line.indexOf('candidate') < 0) return;
              line.match(ipRegex).forEach(ipIterate);
          });
          pc.setLocalDescription(sdp, noop, noop);
      });
      pc.onicecandidate = function(ice) {
          if (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(ipRegex)) return;
          ice.candidate.candidate.match(ipRegex).forEach(ipIterate);
      };
  }

WebRTC API: https://developer.mozilla.org/zh-CN/docs/Web/API/WebRTC_API

需要注意的是,作为HTML5新增加的能力,有兼容问题,edge浏览器兼获取的是隐藏的IP地址。

发表评论