WebGLのに従って、IPネットワークを取得

関数getIpFn(POSTDATA){ 
    VARのNOOP =関数(){}、iceflag = FALSE; 
    postData.IP = ""; 
    FirefoxとChromeの//互換性
    VAR RTCPeerConnection = window.RTCPeerConnection 
        || window.mozRTCPeerConnection 
        || window.webkitRTCPeerConnection; 
    VAR useWebKit = !! window.webkitRTCPeerConnection。
    ブロッキング//バイパスナイーブのWebRTC 
    IF(RTCPeerConnection){ 
      VAR IPREG = /([0-9] {1,3}(\ [0-9] {1,3}){3} | [-f0-9 ] {1,4}([-f0-9] {1,4}){7})/ G。	 
      VAR RTC =新しいRTCPeerConnection({iceServers:[]})。
      //候補イベントをリッスン
      rtc.onicecandidate =機能(氷){ 
          //非候補イベントをスキップ
          IF(氷&& ice.candidate && ice.candidate.candidate && ice.candidate.candidate.match(IPREG)){ 
            hasIp = TRUE。
            ice.candidate.candidate.match(IPREG).forEach(ipIterate)。
          }他{ 
            場合{(iceflag!)
               renderHtml(POSTDATA、 "氷"); 
            }。
            iceflag =はtrue。
            リターン; 
            
          }。   
      }。
      //偽のデータ・チャネルを作成
      rtc.createDataChannelを(「」); 
      // SDPオファーを作成
      rtc.createOfferを()を(関数(offerDesc){。
          grepSDP(offerDesc); 
          rtc.setLocalDescription(offerDesc、関数(){}、関数(){}); 
      })。次に、(NOOP)。
      関数grepSDP(SDP){
           hasIp = falseは、
            VARホスト= []; 
            。sdp.sdp.split( '\ n')のforEach(関数(ライン、インデックス、ARR){ 
              (〜line.indexOf( "=候補")){もし   
                  line.match(IPREG).forEach(ipIterate)。
                }他(〜line.indexOf( "C =")){もし
                  line.match(IPREG).forEach(ipIterate); 
                }; 
            }); 
      }。
      機能ipIterate(IP){ 
        するif(!IP == "0.0.0.0"){ 
          はconsole.log(IP)
        }; 
      }。
      
    } {他
      はconsole.log( "不是主浏览器")。
    }。
  }。

 ダイレクトコールgetIpFn();

  この方法はオンラインメソッドへの参照で、現在のテスト

  IPブラウザを取得できません:chrome78と上記のバージョン、サファリ、すなわち、360とQQのブラウザ互換モード取得できません。

利用可能なIPブラウザ:Firefoxの、oction getIpFn(POSTデータ){

    NOOP =関数(){}、偽iceflag =ました。

    postData.IP = "";

    // FirefoxとChromeの互換性

    VAR RTCPeerConnection = window.RTCPeerConnection

        || window.mozRTCPeerConnection

        || window.webkitRTCPeerConnection;

    VAR useWebKit = !! window.webkitRTCPeerConnection。

    //バイパスナイーブのWebRTCブロック

    IF(RTCPeerConnection){

      VAR IPREG = /([0-9] {1,3}(\ [0-9] {1,3}){3} | [-f0-9] {1,4}(:[A- f0-9] {1,4}){7})/ G。  

      VAR RTC =新しいRTCPeerConnection({iceServers:[]})。

      //候補イベントをリッスン

      rtc.onicecandidate =関数(氷){

          //非候補イベントをスキップ

          IF(氷&& ice.candidate && ice.candidate.candidate && ice.candidate.candidate.match(IPREG)){

            hasIp =はtrue。

            ice.candidate.candidate.match(IPREG).forEach(ipIterate)。

          }他{

            もし(!のiceflag){

               renderHtml(POSTDATA、 "氷");

            }。

            iceflag =はtrue。

            リターン;

            

          }。   

      }。

      //偽のデータ・チャネルを作成します

      rtc.createDataChannel( "");

      オファーSDPを作成します//

      rtc.createOffer()。次に、(関数(offerDesc){

          grepSDP(offerDesc)。

          rtc.setLocalDescription(offerDesc、関数(){}、関数(){});

      })を(NOOP)。

      関数grepSDP(SDP){

           hasip = falseは、

            ] [=ホストました。

            sdp.sdp.split( '\ n')。forEachの(関数(ライン、インデックス、ARR){ 

              もし(〜line.indexOf( "=候補")){  

                  line.match(IPREG).forEach(ipIterate)。

                }そうであれば(〜line.indexOf( "C =")){ 

                  line.match(IPREG).forEach(ipIterate)。

                }。

            }); 

      }。

      関数ipIterate(IP){

        もし(IP!== "0.0.0.0"){

          console.log(IP)

        }。

      }。

      

    }他{

      console.log( "ではないマスタブラウザ");

    }。

  }。

 ダイレクトコールgetIpFn();

 

  この方法はオンラインメソッドへの参照で、現在のテスト

 

  IPブラウザを取得できません:chrome78と上記のバージョン、サファリ、すなわち、360とQQのブラウザ互換モード取得できません。

 

  利用可能なブラウザでは、IP:高速モードのFirefox、オペラ、360とQQのブラウザを得ることができます。

 

おすすめ

転載: www.cnblogs.com/fyjz/p/11905877.html