断裂:RTCIceCandidate不再返回IP

时间:2019-06-25 13:55:22

标签: 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"

请注意,RTCIceCanadate的第一个属性是“地址”,而“ 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];
}

WebRTC现在是否正式成为标准? MOZ仍将“ ip”列为RTCIceCandidate的成员,而没有提及Chrome返回的“ address”成员。

是否可以将“地址”混淆为“ ip”?

5 个答案:

答案 0 :(得分:3)

您可以在Chrome中禁用此功能 转到chrome :: // flags 并禁用“匿名化WebRTC公开的本地IP” enter image description here

答案 1 :(得分:2)

Chrome浏览器没有中断,WebRTC标准正在不断发展,以防止网站通过转移WebRTC API来收集本地地址。如果您使用此技巧来获取本地地址,则可能需要寻找另一种方法。

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

答案 2 :(得分:1)

在某些时候,ip字段已重命名为W3C webrtc specification中的地址,因为现在这些字段可以包含IP地址或mdns主机名。 您所看到的是在Chrome 75中发生的ħere中介绍的WebRTC主机候选模糊处理的一部分。您无法在浏览器中解码此mdns主机名。

如果您有合法的用例,则可能需要在邮件列表线程中考虑它。

答案 3 :(得分:0)

我注意到发生了这种情况,只返回了一个 mDNS 地址(有关混淆的更多信息,请阅读 this great article 完整解释发生的情况)。

但是,我确实找到了一个似乎可以“修复”此问题的新存储库(工作,但不公开私有 ip,仅公开)。可以找到here,示例可以找到here

答案 4 :(得分:-3)

我尝试了上面的代码,它返回了模糊的IP。  同样,C ++代码无法根据需要解析该混淆的IP-based on what I undestood-升级libnice 0.1.15或更高版本。在执行

sudo apt-get install libnice-dev

安装0.1.14-1,因为到目前为止它是ubuntu 18.04的默认版本。

enter image description here