RTCIceCandidate 不再返回 IP

Dom*_*ano 10 webrtc

刚刚注意到在 Chrome 上,RTCIceCandidate 不再返回 IP,而是一个混淆的地址。

RTCIceCandidate 
address: "a5b3ef18-2e66-4e24-91d2-893b93bbc1c1.local"
candidate: "candidate:169888242 1 udp 2113937151 a5b3ef18-2e66-4e24-91d2-893b93bbc1c1.local 47871 typ host generation 0 ufrag 7dHv network-cost 999"
component: "rtp"
foundation: "169888242"
port: 47871
priority: 2113937151
protocol: "udp"
relatedAddress: null
relatedPort: null
sdpMLineIndex: 0
sdpMid: "0"
tcpType: ""
type: "host"
usernameFragment: "7dHv"
Run Code Online (Sandbox Code Playgroud)

注意 RTCIceCanadate 的第一个属性是“address”,“ip”不再是这个对象的一部分。

以下代码确定浏览器的本地 IP 地址。仍然适用于 MOZ

function discover()
{
    try{
        //Get Local IP
        window.RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;   //compatibility for firefox and chrome

        if (pc)
            pc.close();

        pc = new RTCPeerConnection({iceServers:[]});   
        pc.onicecandidate = onIceCandidate;   
        pc.createDataChannel("");   
        pc.createOffer(pc.setLocalDescription.bind(pc), noop);   

    } catch (e)
    { console.log(e.message);}
}

function noop()
{
}

function onIceCandidate(ice)
{   
    console.log(ice.candidate);

    if(!ice || !ice.candidate || !ice.candidate.candidate)  return;

    var my_ip = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/.exec(ice.candidate.candidate)[1];

    this.onicecandidate = noop;

    ip = my_ip.split(".")[0]+'.'+my_ip.split(".")[1]+'.'+my_ip.split(".")[2];
}
Run Code Online (Sandbox Code Playgroud)

WebRTC 现在正式是一个支离破碎的标准了吗?MOZ 仍然将 "ip" 列为RTCIceCandidate的成员,而没有提及 Chrome 返回的 "address" 成员。

有没有办法将 mDNS 地址反混淆为 ip 地址,而不会强迫用户搞乱他们不理解的浏览器设置?

Pau*_*eau 7

Chrome 没有损坏,WebRTC 标准正在发展,以防止网站通过转移 WebRTC API 来收集本地地址。如果您使用此 hack 来获取本地地址,则可能需要找到另一种方法。

以下是ChromiumFirefox的相应问题,以及WebRTC mDNS 候选者的当前IETF 草案

  • 这不是黑客攻击,它是标准默认值,直到“因为安全原因”被任意切换。如果您真正阅读过这些标准,您就会知道这一点。Chrome 安全策略显然不稳定,使得像 WebRTC 这样的点对点堆栈对于生产来说风险太大。我对开发人员的建议是尽可能避免使用 Chrome。不要向使者开枪。 (3认同)
  • 抱歉,RFC 5245 表示收集候选主机 IP 不是强制性的(实际上,Safari 默认情况下不会为 IPv4 执行此操作)。RFC 8445 甚至规定了服务器自反候选中的私有 IPv4 地址“如果代理不想透露它们,例如出于隐私原因,这些可以被省略或设置为无效值。” 我完全赞成避免使用 Chrome 并实际上切换到 Firefox,但请注意,他们正在 Firefox 中实现相同的 mDNS 候选标准。 (3认同)

div*_*mon 3

我注意到这种情况正在发生,只返回一个 mDNS 地址(有关混淆的更多信息,请阅读这篇完整解释所发生情况的精彩文章)。

然而,我确实找到了一个新的存储库,它似乎可以“修复”这个问题(可以工作,但不暴露私有 IP,仅暴露公共 IP)。可以在此处找到它,并且可以在此处找到示例。

  • 是的,Github 项目非常棒! (2认同)