関数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のブラウザを得ることができます。