你的位置:首页 > 软件开发 > ASP.net > 几个比较”有意思“的JS脚本

几个比较”有意思“的JS脚本

发布时间:2016-07-23 16:00:23
1.获取内网和公网真实IP地址(引用地址)<!DOCTYPE html><html> <head> <meta http-equiv="Content-Type" content="text/html ...

几个比较”有意思“的JS脚本

1.获取内网和公网真实IP地址(引用地址)

<!DOCTYPE html><html>  <head>    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  </head>  <body>    <h4>      Demo for:      <a href="https://github.com/diafygi/webrtc-ips">        https://github.com/diafygi/webrtc-ips      </a>    </h4>    <p>      This demo secretly makes requests to STUN servers that can log your      request. These requests do not show up in developer consoles and      cannot be blocked by browser plugins (AdBlock, Ghostery, etc.).    </p>    <h4>Your local IP addresses:</h4>    <ul></ul>    <h4>Your public IP addresses:</h4>    <ul></ul>    <script>      //get the IP addresses associated with an account      function getIPs(callback){        var ip_dups = {};        //compatibility for firefox and chrome        var RTCPeerConnection = window.RTCPeerConnection          || window.mozRTCPeerConnection          || window.webkitRTCPeerConnection;        var useWebKit = !!window.webkitRTCPeerConnection;        //bypass naive webrtc blocking        if(!RTCPeerConnection){          //create an iframe node          var iframe = document.createElement('iframe');          iframe.style.display = 'none';          //invalidate content script          iframe.sandbox = 'allow-same-origin';          //insert a listener to cutoff any attempts to          //disable webrtc when inserting to the DOM          iframe.addEventListener("DOMNodeInserted", function(e){            e.stopPropagation();          }, false);          iframe.addEventListener("DOMNodeInsertedIntoDocument", function(e){            e.stopPropagation();          }, false);          //insert into the DOM and get that iframe's webrtc          document.body.appendChild(iframe);          var win = iframe.contentWindow;          RTCPeerConnection = win.RTCPeerConnection            || win.mozRTCPeerConnection            || win.webkitRTCPeerConnection;          useWebKit = !!win.webkitRTCPeerConnection;        }        //minimal requirements for data connection        var mediaConstraints = {          optional: [{RtpDataChannels: true}]        };        //firefox already has a default stun server in about:config        //  media.peerconnection.default_iceservers =        //  [{"url": "stun:stun.services.mozilla.com"}]        var servers = undefined;        //add same stun server for chrome        if(useWebKit)          servers = {iceServers: [{urls: "stun:stun.services.mozilla.com"}]};        //construct a new RTCPeerConnection        var pc = new RTCPeerConnection(servers, mediaConstraints);        function handleCandidate(candidate){          //match just the IP address          var ip_regex = /([0-9]{1,3}(\.[0-9]{1,3}){3})/          var ip_addr = ip_regex.exec(candidate)[1];          //remove duplicates          if(ip_dups[ip_addr] === undefined)            callback(ip_addr);          ip_dups[ip_addr] = true;        }        //listen for candidate events        pc.onicecandidate = function(ice){          //skip non-candidate events          if(ice.candidate)            handleCandidate(ice.candidate.candidate);        };        //create a bogus data channel        pc.createDataChannel("");        //create an offer sdp        pc.createOffer(function(result){          //trigger the stun server request          pc.setLocalDescription(result, function(){}, function(){});        }, function(){});        //wait for a while to let everything done        setTimeout(function(){          //read candidate info from local description          var lines = pc.localDescription.sdp.split('\n');          lines.forEach(function(line){            if(line.indexOf('a=candidate:') === 0)              handleCandidate(line);          });        }, 1000);      }      //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);        //assume the rest are public IPs        else          document.getElementsByTagName("ul")[1].appendChild(li);      });    </script>  </body></html>

原标题:几个比较”有意思“的JS脚本

关键词:JS

JS
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。