局域网IP地址的JavaScript检测

局域网IP地址的JavaScript检测,javascript,ip,lan,Javascript,Ip,Lan,我一直在使用下面的代码来检测运行某些专有软件的客户端的LAN IP地址(请不要“你不应该这样做”,我没有编写代码) 这是来自另一个StackOverflow的帖子,代码在一年半的时间里一直运行良好,直到今天下午 其中,我的本地ip似乎被检测为153b3a68-e3fb-4451-9717-d9b3bc2b5c60.local,而不是通常的192.168.0.11 编辑: 如果有人关心的话,这个问题是不可绕过的,必须通过服务器端语言来解决,在我的例子中,我最终使用PHP作为解决问题的临时“绷带”

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

这是来自另一个StackOverflow的帖子,代码在一年半的时间里一直运行良好,直到今天下午

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

编辑: 如果有人关心的话,这个问题是不可绕过的,必须通过服务器端语言来解决,在我的例子中,我最终使用PHP作为解决问题的临时“绷带”


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

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

另见:

总结:

如[IPHandling]中所述,通过 默认值使成功创建直接连接的概率最大化 两个客户端之间的点对点连接,但会创建 用户指纹的重要表面。[IPHandling]识别 这个问题,但也承认目前没有解决办法 问题选择使用模式3解决问题的实现 隐私问题通常会受到连接失败或次优连接的影响 在WebRTC应用程序中。这是一个关于非托管的问题 网络,通常是家庭或小型办公室,其中NAT环回可能 不受支持

本文件通过以下方式提出了该问题的总体解决方案: 为每个本地专用IP地址注册临时MDN名称, 然后将这些名称而不是IP地址提供给 收集ICE候选对象时的web应用程序。WebRTC 实现将这些名称解析为IP地址并执行ICE 正常处理,但实际IP地址不会暴露于 web应用程序


你为什么不在另一个SO问题中发表评论,问为什么它不再有效?因为这似乎仅限于我的经验。这不是一个“全面”的交易。我想知道是否有其他人对此有任何经验。我只是尝试了一下,效果很好。这是我的观点,我想知道是否有其他人有过我的经验,正如我的每个问题。如果你有mac:Ouch,请使用这种方法,这样就没有办法了?这是Windows的一部分吗?@BarrieReader不,它周围没有路,也不应该有。如果这是您需要的功能,请使用浏览器扩展。这是Chrome(可能还有其他浏览器)的一部分,而不是Windows。由于应用程序在Chrome的AppMode下运行,因此无法进行浏览器扩展。。。它在本地运行。。。因此,信任个人用户安装扩展是不可能的:(
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();