mirror of
				https://github.com/privacyguides/privacyguides.org.git
				synced 2025-11-04 05:17:57 +00:00 
			
		
		
		
	
							
								
								
									
										180
									
								
								webrtc.html
									
									
									
									
									
								
							
							
						
						
									
										180
									
								
								webrtc.html
									
									
									
									
									
								
							@@ -36,88 +36,106 @@ 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
 | 
					
 | 
				
			||||||
var RTCPeerConnection = window.RTCPeerConnection
 | 
					                //compatibility for firefox and chrome
 | 
				
			||||||
|| window.mozRTCPeerConnection
 | 
					                var RTCPeerConnection = window.RTCPeerConnection
 | 
				
			||||||
|| window.webkitRTCPeerConnection;
 | 
					                    || window.mozRTCPeerConnection
 | 
				
			||||||
var useWebKit = !!window.webkitRTCPeerConnection;
 | 
					                    || window.webkitRTCPeerConnection;
 | 
				
			||||||
//bypass naive webrtc blocking using an iframe
 | 
					                var useWebKit = !!window.webkitRTCPeerConnection;
 | 
				
			||||||
if(!RTCPeerConnection){
 | 
					
 | 
				
			||||||
//NOTE: you need to have an iframe in the page right above the script tag
 | 
					                //bypass naive webrtc blocking using an iframe
 | 
				
			||||||
//
 | 
					                if(!RTCPeerConnection){
 | 
				
			||||||
//<iframe id="iframe" sandbox="allow-same-origin" style="display: none"></iframe>
 | 
					                    //NOTE: you need to have an iframe in the page right above the script tag
 | 
				
			||||||
//<script>...getIPs called in here...
 | 
					                    //
 | 
				
			||||||
//
 | 
					                    //<iframe id="iframe" sandbox="allow-same-origin" style="display: none"></iframe>
 | 
				
			||||||
var win = iframe.contentWindow;
 | 
					                    //<script>...getIPs called in here...
 | 
				
			||||||
RTCPeerConnection = win.RTCPeerConnection
 | 
					                    //
 | 
				
			||||||
|| win.mozRTCPeerConnection
 | 
					                    var win = iframe.contentWindow;
 | 
				
			||||||
|| win.webkitRTCPeerConnection;
 | 
					                    RTCPeerConnection = win.RTCPeerConnection
 | 
				
			||||||
useWebKit = !!win.webkitRTCPeerConnection;
 | 
					                        || win.mozRTCPeerConnection
 | 
				
			||||||
}
 | 
					                        || win.webkitRTCPeerConnection;
 | 
				
			||||||
//minimal requirements for data connection
 | 
					                    useWebKit = !!win.webkitRTCPeerConnection;
 | 
				
			||||||
var mediaConstraints = {
 | 
					                }
 | 
				
			||||||
optional: [{RtpDataChannels: true}]
 | 
					
 | 
				
			||||||
};
 | 
					                //minimal requirements for data connection
 | 
				
			||||||
//firefox already has a default stun server in about:config
 | 
					                var mediaConstraints = {
 | 
				
			||||||
// media.peerconnection.default_iceservers =
 | 
					                    optional: [{RtpDataChannels: true}]
 | 
				
			||||||
// [{"url": "stun:stun.services.mozilla.com"}]
 | 
					                };
 | 
				
			||||||
var servers = undefined;
 | 
					
 | 
				
			||||||
//add same stun server for chrome
 | 
					                var servers = {iceServers: [{urls: "stun:stun.services.mozilla.com"}]};
 | 
				
			||||||
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
 | 
					
 | 
				
			||||||
if(ip_dups[ip_addr] === undefined)
 | 
					                    //remove duplicates
 | 
				
			||||||
callback(ip_addr);
 | 
					                    if(ip_dups[ip_addr] === undefined)
 | 
				
			||||||
ip_dups[ip_addr] = true;
 | 
					                        callback(ip_addr);
 | 
				
			||||||
}
 | 
					
 | 
				
			||||||
//listen for candidate events
 | 
					                    ip_dups[ip_addr] = true;
 | 
				
			||||||
pc.onicecandidate = function(ice){
 | 
					                }
 | 
				
			||||||
//skip non-candidate events
 | 
					
 | 
				
			||||||
if(ice.candidate)
 | 
					                //listen for candidate events
 | 
				
			||||||
handleCandidate(ice.candidate.candidate);
 | 
					                pc.onicecandidate = function(ice){
 | 
				
			||||||
};
 | 
					
 | 
				
			||||||
//create a bogus data channel
 | 
					                    //skip non-candidate events
 | 
				
			||||||
pc.createDataChannel("");
 | 
					                    if(ice.candidate)
 | 
				
			||||||
//create an offer sdp
 | 
					                        handleCandidate(ice.candidate.candidate);
 | 
				
			||||||
pc.createOffer(function(result){
 | 
					                };
 | 
				
			||||||
//trigger the stun server request
 | 
					
 | 
				
			||||||
pc.setLocalDescription(result, function(){}, function(){});
 | 
					                //create a bogus data channel
 | 
				
			||||||
}, function(){});
 | 
					                pc.createDataChannel("");
 | 
				
			||||||
//wait for a while to let everything done
 | 
					
 | 
				
			||||||
setTimeout(function(){
 | 
					                //create an offer sdp
 | 
				
			||||||
//read candidate info from local description
 | 
					                pc.createOffer(function(result){
 | 
				
			||||||
var lines = pc.localDescription.sdp.split('\n');
 | 
					
 | 
				
			||||||
lines.forEach(function(line){
 | 
					                    //trigger the stun server request
 | 
				
			||||||
if(line.indexOf('a=candidate:') === 0)
 | 
					                    pc.setLocalDescription(result, function(){}, function(){});
 | 
				
			||||||
handleCandidate(line);
 | 
					
 | 
				
			||||||
});
 | 
					                }, function(){});
 | 
				
			||||||
}, 1000);
 | 
					
 | 
				
			||||||
}
 | 
					                //wait for a while to let everything done
 | 
				
			||||||
//insert IP addresses into the page
 | 
					                setTimeout(function(){
 | 
				
			||||||
getIPs(function(ip){
 | 
					                    //read candidate info from local description
 | 
				
			||||||
var li = document.createElement("li");
 | 
					                    var lines = pc.localDescription.sdp.split('\n');
 | 
				
			||||||
li.textContent = ip;
 | 
					
 | 
				
			||||||
//local IPs
 | 
					                    lines.forEach(function(line){
 | 
				
			||||||
if (ip.match(/^(192\.168\.|169\.254\.|10\.|172\.(1[6-9]|2\d|3[01]))/))
 | 
					                        if(line.indexOf('a=candidate:') === 0)
 | 
				
			||||||
document.getElementsByTagName("ul")[0].appendChild(li);
 | 
					                            handleCandidate(line);
 | 
				
			||||||
//assume the rest are public IPs
 | 
					                    });
 | 
				
			||||||
else
 | 
					                }, 1000);
 | 
				
			||||||
document.getElementsByTagName("ul")[1].appendChild(li);
 | 
					            }
 | 
				
			||||||
});
 | 
					
 | 
				
			||||||
</script>
 | 
					            //insert IP addresses into the page
 | 
				
			||||||
 | 
					            getIPs(function(ip){
 | 
				
			||||||
 | 
					                var li = document.createElement("li");
 | 
				
			||||||
 | 
					                li.textContent = ip;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                //local IPs
 | 
				
			||||||
 | 
					                if (ip.match(/^(192\.168\.|169\.254\.|10\.|172\.(1[6-9]|2\d|3[01]))/))
 | 
				
			||||||
 | 
					                    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
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                    document.getElementsByTagName("ul")[1].appendChild(li);
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        </script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
</body>
 | 
					</body>
 | 
				
			||||||
		Reference in New Issue
	
	Block a user