mirror of
https://github.com/privacyguides/privacyguides.org.git
synced 2025-01-11 23:49:49 -05:00
parent
7fa802becc
commit
cb327bacc1
36
webrtc.html
36
webrtc.html
@ -36,18 +36,21 @@ cannot be blocked by browser plugins like AdBlock, Ghostery, etc.
|
|||||||
|
|
||||||
<p> </p>
|
<p> </p>
|
||||||
|
|
||||||
<p><a href="https://github.com/diafygi/webrtc-ips">Source code on GitHub</a></p>
|
<p>Source Code: <a href="https://github.com/diafygi/webrtc-ips" target="_blank">GitHub</a>
|
||||||
|
<br>Script Version: Jul 20, 2015</a></p>
|
||||||
|
|
||||||
<iframe id="iframe" sandbox="allow-same-origin" style="display: none"></iframe>
|
<iframe id="iframe" sandbox="allow-same-origin" style="display: none"></iframe>
|
||||||
<script>
|
<script>
|
||||||
//get the IP addresses associated with an account
|
//get the IP addresses associated with an account
|
||||||
function getIPs(callback){
|
function getIPs(callback){
|
||||||
var ip_dups = {};
|
var ip_dups = {};
|
||||||
|
|
||||||
//compatibility for firefox and chrome
|
//compatibility for firefox and chrome
|
||||||
var RTCPeerConnection = window.RTCPeerConnection
|
var RTCPeerConnection = window.RTCPeerConnection
|
||||||
|| window.mozRTCPeerConnection
|
|| window.mozRTCPeerConnection
|
||||||
|| window.webkitRTCPeerConnection;
|
|| window.webkitRTCPeerConnection;
|
||||||
var useWebKit = !!window.webkitRTCPeerConnection;
|
var useWebKit = !!window.webkitRTCPeerConnection;
|
||||||
|
|
||||||
//bypass naive webrtc blocking using an iframe
|
//bypass naive webrtc blocking using an iframe
|
||||||
if(!RTCPeerConnection){
|
if(!RTCPeerConnection){
|
||||||
//NOTE: you need to have an iframe in the page right above the script tag
|
//NOTE: you need to have an iframe in the page right above the script tag
|
||||||
@ -61,58 +64,73 @@ RTCPeerConnection = win.RTCPeerConnection
|
|||||||
|| win.webkitRTCPeerConnection;
|
|| win.webkitRTCPeerConnection;
|
||||||
useWebKit = !!win.webkitRTCPeerConnection;
|
useWebKit = !!win.webkitRTCPeerConnection;
|
||||||
}
|
}
|
||||||
|
|
||||||
//minimal requirements for data connection
|
//minimal requirements for data connection
|
||||||
var mediaConstraints = {
|
var mediaConstraints = {
|
||||||
optional: [{RtpDataChannels: true}]
|
optional: [{RtpDataChannels: true}]
|
||||||
};
|
};
|
||||||
//firefox already has a default stun server in about:config
|
|
||||||
// media.peerconnection.default_iceservers =
|
var servers = {iceServers: [{urls: "stun:stun.services.mozilla.com"}]};
|
||||||
// [{"url": "stun:stun.services.mozilla.com"}]
|
|
||||||
var servers = undefined;
|
|
||||||
//add same stun server for chrome
|
|
||||||
if(useWebKit)
|
|
||||||
servers = {iceServers: [{urls: "stun:stun.services.mozilla.com"}]};
|
|
||||||
//construct a new RTCPeerConnection
|
//construct a new RTCPeerConnection
|
||||||
var pc = new RTCPeerConnection(servers, mediaConstraints);
|
var pc = new RTCPeerConnection(servers, mediaConstraints);
|
||||||
|
|
||||||
function handleCandidate(candidate){
|
function handleCandidate(candidate){
|
||||||
//match just the IP address
|
//match just the IP address
|
||||||
var ip_regex = /([0-9]{1,3}(\.[0-9]{1,3}){3})/
|
var ip_regex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/
|
||||||
var ip_addr = ip_regex.exec(candidate)[1];
|
var ip_addr = ip_regex.exec(candidate)[1];
|
||||||
|
|
||||||
//remove duplicates
|
//remove duplicates
|
||||||
if(ip_dups[ip_addr] === undefined)
|
if(ip_dups[ip_addr] === undefined)
|
||||||
callback(ip_addr);
|
callback(ip_addr);
|
||||||
|
|
||||||
ip_dups[ip_addr] = true;
|
ip_dups[ip_addr] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//listen for candidate events
|
//listen for candidate events
|
||||||
pc.onicecandidate = function(ice){
|
pc.onicecandidate = function(ice){
|
||||||
|
|
||||||
//skip non-candidate events
|
//skip non-candidate events
|
||||||
if(ice.candidate)
|
if(ice.candidate)
|
||||||
handleCandidate(ice.candidate.candidate);
|
handleCandidate(ice.candidate.candidate);
|
||||||
};
|
};
|
||||||
|
|
||||||
//create a bogus data channel
|
//create a bogus data channel
|
||||||
pc.createDataChannel("");
|
pc.createDataChannel("");
|
||||||
|
|
||||||
//create an offer sdp
|
//create an offer sdp
|
||||||
pc.createOffer(function(result){
|
pc.createOffer(function(result){
|
||||||
|
|
||||||
//trigger the stun server request
|
//trigger the stun server request
|
||||||
pc.setLocalDescription(result, function(){}, function(){});
|
pc.setLocalDescription(result, function(){}, function(){});
|
||||||
|
|
||||||
}, function(){});
|
}, function(){});
|
||||||
|
|
||||||
//wait for a while to let everything done
|
//wait for a while to let everything done
|
||||||
setTimeout(function(){
|
setTimeout(function(){
|
||||||
//read candidate info from local description
|
//read candidate info from local description
|
||||||
var lines = pc.localDescription.sdp.split('\n');
|
var lines = pc.localDescription.sdp.split('\n');
|
||||||
|
|
||||||
lines.forEach(function(line){
|
lines.forEach(function(line){
|
||||||
if(line.indexOf('a=candidate:') === 0)
|
if(line.indexOf('a=candidate:') === 0)
|
||||||
handleCandidate(line);
|
handleCandidate(line);
|
||||||
});
|
});
|
||||||
}, 1000);
|
}, 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
//insert IP addresses into the page
|
//insert IP addresses into the page
|
||||||
getIPs(function(ip){
|
getIPs(function(ip){
|
||||||
var li = document.createElement("li");
|
var li = document.createElement("li");
|
||||||
li.textContent = ip;
|
li.textContent = ip;
|
||||||
|
|
||||||
//local IPs
|
//local IPs
|
||||||
if (ip.match(/^(192\.168\.|169\.254\.|10\.|172\.(1[6-9]|2\d|3[01]))/))
|
if (ip.match(/^(192\.168\.|169\.254\.|10\.|172\.(1[6-9]|2\d|3[01]))/))
|
||||||
document.getElementsByTagName("ul")[0].appendChild(li);
|
document.getElementsByTagName("ul")[0].appendChild(li);
|
||||||
|
|
||||||
|
//IPv6 addresses
|
||||||
|
else if (ip.match(/^[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7}$/))
|
||||||
|
document.getElementsByTagName("ul")[2].appendChild(li);
|
||||||
|
|
||||||
//assume the rest are public IPs
|
//assume the rest are public IPs
|
||||||
else
|
else
|
||||||
document.getElementsByTagName("ul")[1].appendChild(li);
|
document.getElementsByTagName("ul")[1].appendChild(li);
|
||||||
|
Loading…
Reference in New Issue
Block a user