我一直在使用下面的代码来检测运行一些专有软件的客户端的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似乎被检测为153 b3a68-e3fb-4451-9717-d9b3bc2b5c60。本地而不是通常的192.168.0.11。
编辑:如果有人关心这个问题,那么这个问题是不可绕过的,必须通过服务器端语言来解决,在我的例子中,我最终使用PHP作为解决问题的临时“绷带”。
这是我的应用程序的一个问题,因为它检测主机上是否运行本地服务器。如果无法检测到LAN IP地址,则无法执行此操作。
发布于 2019-06-22 00:21:35
这是一个新的安全标准的一部分,以防止泄露私人IP地址。
另见:https://datatracker.ietf.org/doc/html/draft-ietf-rtcweb-mdns-ice-candidates-02
摘要:
正如IPHandling中详细介绍的那样,默认情况下,公开客户端私有IP地址最大限度地提高了在两个客户端之间成功创建直接对等连接的可能性,但为用户指纹创建了一个重要的表面。IPHandling认识到了这个问题,但也承认这个问题没有当前的解决方案;选择使用模式3解决隐私问题的实现经常会受到WebRTC应用程序中失败或次优连接的影响。这尤其是对非管理网络,通常是住宅或小型办公室的问题,在这些地方,NAT回送可能得不到支持。本文档提出了解决此问题的总体解决方案,方法是为每个本地私有IP地址注册短暂的mDNS名称,然后在收集ICE候选地址时向web应用程序提供这些名称,而不是IP地址。WebRTC实现将这些名称解析为IP地址并像往常一样执行ICE处理,但是实际的IP地址不会暴露给web应用程序。
https://stackoverflow.com/questions/56711611
复制相似问题