JSFiddle - React, Tailwind, and code Playground
by javajosh
HTML
<h1>Your IP addresses</h1>
<p>WebRTC leaks your private IP addresses over the internet :(<br><small>Tested on Chrome & Firefox</small></p>
<p>Your public facing IP address: <span id="public_ip"></span></p>
<p>Your internal IP address: <span id="internal_ip"></span></p>
<div id="error"></div>
<script>
var publicIp = false;
function getip(ip) {
publicIp = ip.ip;
public_ip.textContent = publicIp;
setTimeout(function(){extract_ipv4("")}, 1000);
}
</script>
<script src="http://www.telize.com/jsonip?callback=getip"></script>
JavaScript
var ip_addresses = {};
var errors = [];
function extract_ipv4(str) {
var regexp = /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/g;
var t;
while (t = regexp.exec(str)) {
ip_addresses[t[0]] = 1;
}
if (publicIp) {
delete ip_addresses[publicIp];
}
delete ip_addresses["0.0.0.0"];
delete ip_addresses["127.0.0.1"];
internal_ip.textContent = Object.keys(ip_addresses).join(", ")
}
window.extract_ipv4 = extract_ipv4;
function display_error(msg) {
errors.push(msg);
error.textContent = msg.join(", ");
}
var PeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
window.localPeerConnection = new PeerConnection(null, {optional: [{RtpDataChannels: true}]});
try {
sendChannel = localPeerConnection.createDataChannel("", {reliable: false});
} catch (e) {
display_error(e.message);
}
localPeerConnection.onicecandidate =
function(e) {
if (e.candidate) {
extract_ipv4(e.candidate.candidate);
}
}
localPeerConnection.createOffer(function(desc){
extract_ipv4(desc.sdp);
localPeerConnection.setLocalDescription(desc);
}, display_error);