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 &amp; 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);