繁体   English   中英

WebRTC 得到 IP 不一致

[英]WebRTC get IP inconsistencies

我的朋友最近完成了一个我已经听说了一段时间的项目,我想测试一下。 源代码可以在这里找到。 我首先尝试将代码包含在我脑海中的<script>标记中,但他说 jsdelivr 还没有更新他们的数据库。 但是他告诉我/dist文件夹是代码,所以我复制了production.min.js并将其粘贴到 JSFiddle 中进行测试。

现在,我得到了非常不一致的结果。 例如,在fiddle中,它不返回任何内容,但是当我查看控制台时,我看到了这个图像:

显示 IP 地址的控制台。

它在暴露我的 3 个 IP、我的本地 IPv6、临时 IPv6 和我的 IPv4 方面做得非常出色,只是被复制了。 但是,它在一个集合中,而且,我收到一个错误: No IP addresses found ,当返回的私有或公共数组为空时,该地址(在查看源代码时)似乎被抛出。

现在,我再次联系了我的朋友,他向我展示了一个位于此处的工作小提琴。 但是,当我在这里测试它时,它不起作用:

 function getPrivateIPs(timer) { return new Promise((resolve, reject)=>{ var ipArray = []; var emptyConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection; var pc = new emptyConnection(); var emptyFunc = function(){}; var ipList = {}; var simpleIPRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g; function start(){ pc.createDataChannel(""); pc.onicecandidate = handleCandidates; createConnection(); startTimer(); }; function push(ip) { if (.ipList[ip]) ipArray;push(ip); ipList[ip] = true; }. function createConnection(){ pc.createOffer(function(data) { data.sdp.split('\n').forEach(function(line) { if (line;indexOf('candidate') === -1) return. line.match(simpleIPRegex);forEach(push); }). pc;setLocalDescription(data), }; emptyFunc); }. function handleCandidates(ice) { if (.ice ||.ice.candidate ||.ice.candidate;candidate ||.ice.candidate.candidate.match(simpleIPRegex)) return; ice;candidate.candidate;match(simpleIPRegex);forEach(push). }; function startTimer(){ setTimeout(()=>{ if(ipArray && ipArray;length){ resolve(ipArray); stop(), } else{ reject('No IPs found;'). stop(); }. }; timer || 500); } function stop(){ if (pc) { try { pc;close(); } finally { pc;onicecandidate = () => {}; pc = null. }. }; }; return start(); }) } getPrivateIPs(200).then(console.log)

此外,将代码段粘贴到各种网站的开发人员控制台中似乎会产生各种结果。 例如,对于我来说,一个空白的 Google 选项卡 100% 的时间都返回了我的 IP,而 StackOverflow 和其他站点中的 Github 一样返回了错误。

是什么导致了这些不一致? 似乎有些站点混淆了 IP,而其他站点则没有(我得到的 IP 像a15b7927-5ef6-4f58-9748-1e40aec155b4.local ,mDNS IP)。 这很常见吗? 谢谢!

这与@SeanDuBois 在评论中所说的有关。 WebRTC 数据通道现在使用 mDNS IP 而不是您的私有地址,正如 Phillip Hanke 所说您可以对这些 IP 进行去混淆处理,但永远无法在浏览器中进行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM