首页域名资讯 正文

通过webrtc-ip获取本地和外网IP地址

2024-09-07 4 0条评论

Firefox 跟 Chrome支持WebRTC可以向STUN服务器请求,返回内外网IP,不同于XMLHttpRequest请求,STUN请求开发者工具当中看不到网络请求的。

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 < ! 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 >          < h4 > Your IPv6 addresses : < / h4 >          < ul > < / ul >          < iframe id = “iframe” sandbox = “allow-same-origin” style = “display: none” > < / iframe >          <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 using an iframe                  if ( ! RTCPeerConnection ) {                      //NOTE: you need to have an iframe in the page right above the script tag                      //                      //<iframe id=”iframe” sandbox=”allow-same-origin” style=”display: none”></iframe>                      //<script>…getIPs called in here…                      //                      var win = iframe . contentWindow ;                      RTCPeerConnection = win . RTCPeerConnection                          || win . mozRTCPeerConnection                          || win . webkitRTCPeerConnection ;                      useWebKit = ! ! win . webkitRTCPeerConnection ;                  }                  //minimal requirements for data connection                  var mediaConstraints = {                      optional : [ { RtpDataChannels : true } ]                  } ;                  var 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 } | [ a f0 9 ] { 1 , 4 } ( : [ a f0 9 ] { 1 , 4 } ) { 7 } ) /                      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 ) ;                  //IPv6 addresses                  else if ( ip . match ( / ^ [ a f0 9 ] { 1 , 4 } ( : [ a f0 9 ] { 1 , 4 } ) { 7 } $ / ) )                      document . getElementsByTagName ( “ul” ) [ 2 ] . appendChild ( li ) ;                  //assume the rest are public IPs                  else                      document . getElementsByTagName ( “ul” ) [ 1 ] . appendChild ( li ) ;              } ) ;          </script>      < / body > < / html >

不管你经过了多少次代理,不管你网络情况是如何的复杂,都能获取到你真实的出口IP地址的。只支持chrome和Firefox浏览器。

文章转载来自:trustauth.cn

文章版权及转载声明

本文作者:亿网 网址:https://edns.com/ask/post/150794.html 发布于 2024-09-07
文章转载或复制请以超链接形式并注明出处。