如果你要黑别人,至少做的干净点!
纽约时报使用WebRTC收集你的本地IP地址... Tsahi在自己的博客从非技术角度描述了这个问题。让我们看一下技术细节......
事实证明,使用的Javascript实现的代码很笨重,效率低下。
首先要做的是检测 chrome://webrtc-internals 然后nytimes.com使用了 RTCPeerConnection API。我们可以看到他创建了一个peerconnection连接(端到端),并且RtpDataChannels参数设置为true,并且将stun:ph.tagsrvcs.com作为STUN服务器。
而且,我们看到,有个数据通道被创建(daa channel),接着调用createOffer和setLocalDescription。这是两个很常见收集IP地址的方法。
你可以通过Chrome的开发工具搜索到这个文件,RTCPeerConnection在下面的JavaScript文件中创建: http://s.tagsrvcs.com/2/4.10.0/loaded.js
它是被压缩过的,这是这段收集IP地址的代码
Mt = function() {function e() {this.addrsFound = {"0.0.0.0": 1}}return e.prototype.grepSDP = function(e, t) {var n = this;if (e) {var o = [];e.split("\r\n").forEach(function(e) {if (0 == e.indexOf("a=candidate") || 0 == e.indexOf("candidate:")) {var t = e.split(" "),i = t[4],r = t[7];("host" === r || "srflx" === r) && (n.addrsFound[i] || (o.push(i), n.addrsFound[i] = 1))} else if (0 == e.indexOf("c=")) {var t = e.split(" "),i = t[2];n.addrsFound[i] || (o.push(i), n.addrsFound[i] = 1)}}), o.length > 0 && t.queue(new y("webRTC", o))}}, e.prototype.run = function(e) {var t = this;if (c.wrip) {var n = window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection;if (n) {var o = {optional: [{RtpDataChannels: !0}]},i = []; - 1 == w.baseDomain.indexOf("update.") && i.push({url: "stun:ph." + w.baseDomain});var r = new n({iceServers: i}, o);r.onicecandidate = function(n) {n.candidate && t.grepSDP(n.candidate.candidate, e)}, r.createDataChannel(""), r.createOffer(function(e) {r.setLocalDescription(e, function() {}, function() {})}, function() {});var a = 0,s = setInterval(function() {null != r.localDescription && t.grepSDP(r.localDescription.sdp, e), ++a > 15 && (clearInterval(s), r.close())}, 200)}}}, e}(),
该代码在onicecandidate上绑定了回调并通过它得到candidate。然后,数据信道被创建,并通过createOffer和setLocalDescription启动收集过程。
此外,在下面的代码片段中
var a = 0,s = setInterval(function() {null != r.localDescription && t.grepSDP(r.localDescription.sdp, e), ++a > 15 && (clearInterval(s), r.close())}, 200)
该localDescription每200ms重做一次,持续三秒钟。这个轮询是完全没有必要的。
-_-
kfdgdfgs**加粗文本**
sdf