LAN IP地址的JavaScript检测

时间:2019-06-22 00:03:31

标签: javascript ip lan

我一直在使用以下代码来检测运行某些专有软件的客户端的LAN IP地址(请不要使用“您不应该这样做”,我没有编写代码)。

function ip_local()
{
 var ip = false;
 window.RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection || false;

 if (window.RTCPeerConnection)
 {
  ip = [];
  var pc = new RTCPeerConnection({iceServers:[]}), noop = function(){};
  pc.createDataChannel('');
  pc.createOffer(pc.setLocalDescription.bind(pc), noop);

  pc.onicecandidate = function(event)
  {
   if (event && event.candidate && event.candidate.candidate)
   {
    var s = event.candidate.candidate.split('\n');
    ip.push(s[0].split(' ')[4]);
   }
  }
 }

 return ip;
}
ip_local();

这是另一个StackOverflow帖子的内容,直到今天下午,该代码已经可以正常工作一年半了。

我的本​​地IP似乎被检测为153b3a68-e3fb-4451-9717-d9b3bc2b5c60.local,而不是通常的192.168.0.11。

编辑: 如果有人在乎,这个问题是无法绕过的,必须通过服务器端语言来解决,就我而言,我最终将PHP用作解决该问题的临时“创可贴”。

这对我的应用程序来说是个问题,因为它会检测主机上是否正在运行本地服务器。如果无法检测到LAN IP地址,它将无法执行。

1 个答案:

答案 0 :(得分:1)

这是新安全标准的一部分,目的是防止私有IP地址泄漏。

另请参阅:https://tools.ietf.org/html/draft-ietf-rtcweb-mdns-ice-candidates-02

摘要:

  

如[IPHandling]中所述,通过以下方式公开客户端专用IP地址:      默认值可最大程度地提高成功创建直接交易的可能性      两个客户端之间的对等连接,但会创建一个      用户指纹的重要表面。 [IPHandling]识别      这个问题,但也承认目前没有解决方案      问题;选择使用模式3来解决      隐私问题通常会因连接失败或连接不佳而受到影响      在WebRTC应用程序中。在不受管理的情况下,这尤其是一个问题      网络,通常是家庭或小型办公室,可能会发生NAT环回      不支持。

     

本文档通过以下方式提出了针对此问题的整体解决方案      为每个本地私有IP地址注册临时mDNS名称,      然后将这些名称而不是IP地址提供给      Web应用程序收集ICE候选者时。 WebRTC      实现将这些名称解析为IP地址并执行ICE      照常进行处理,但实际的IP地址没有暴露给      Web应用程序。