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();
   ...