Get Private IPs using WebRTC
JavaScript
function getPrivateIPs(timer) {
return new Promise((resolve, reject)=>{
var ipArray = [];
var emptyConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
var pc = new emptyConnection();
var emptyFunc = function(){};
var ipList = {};
var simpleIPRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g;
function start(){
pc.createDataChannel("");
pc.onicecandidate = handleCandidates;
createConnection();
startTimer();
};
function push(ip) {
if (!ipList[ip]) ipArray.push(ip);
ipList[ip] = true;
};
function createConnection(){
pc.createOffer(function(data) {
data.sdp.split('\n').forEach(function(line) {
if (line.indexOf('candidate') === -1) return;
line.match(simpleIPRegex).forEach(push);
});
pc.setLocalDescription(data);
}, emptyFunc);
};
function handleCandidates(ice) {
if (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(simpleIPRegex)) return;
ice.candidate.candidate.match(simpleIPRegex).forEach(push);
};
function startTimer(){
setTimeout(()=>{
if(ipArray){
resolve(ipArray);
stop();
} else{
reject('No IPs found.');
stop();
};
}, timer || 500);
}
function stop(){
if (pc) {
try {
pc.close();
} finally {
pc.onicecandidate = () => {};
pc = null;
};
};
};
return start();
...