2016-04-29 27 views
0

私はWebアプリケーションを作成しています。実行するためには、デバイスを「登録済み」にする必要があります。登録プロセスでは、使用するデバイスのIPv4アドレスをデータベースを更新するフィールドに入力します。

アプリケーションにアクセスするときは、window.webkitRTCPeerConnectionまたはwindow.mozRTCPeerConnectionをチェックしてIPアドレスを取得します。これはChromeとFirefoxの最新バージョンで動作しますが、IEでは動作しません。したがって、IPがRTCPeerConnectionチェックから取得されなかった場合は、ActiveXを使用する必要がありました。

私の問題は、Safariにアプリケーションを実行させたいのですが、Safariを実行しているデバイスのIPv4アドレスを取得する方法については何も見つかりません。

明確にするために、このWebアプリケーションは公開されていないため、アプリケーションを実行しているデバイスにインストールされているものを完全に制御できます。 (それは私のActiveXの使用の正当性です)。

どのように私がそのようなことをすることができるかについての示唆および/または参考になります。SafariでJavaScriptを使用してIPv4アドレスを取得

答えて

0

このAPIはあなたのIPアドレスを取得できます。

https://l2.io/

より高度なソリューション: http://dev.maxmind.com/geoip/geoip2/javascript/

この1つはまた、これによると、Safariのをサポートしています。http://dev.maxmind.com/geoip/geoip2/javascript/#Browser_Support

最後のものは、私の意見では最高の一つです。私は私のプロジェクトの1つを使っています。

EDIT: SafariではWebRTC接続はサポートされていません。したがって、サファリでローカルIPアドレスを取得することはできません。

+0

これは本当に良いようだが、それはむしろ私がいる探していると、デバイス(192.168.x.x)のローカルアドレスであるよりも、パブリックIPアドレスを取得します。 – Nathangrad

+0

回答が更新されました。 – Red

+0

私は既にChromeとFirefoxでうまく動作するRTCPeerConnectionを使ってみました。しかし、悲しいことにSafariではうまくいきませんので、私はこの方法を使えません。 – Nathangrad

0

この方法を試してください。

<!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>

+0

これは悲しいことにSafariでは機能しなかった。私は既にRTCPeerConnectionを使用しようとしたが、SafariのChromeとFirefoxと同様に動作しない。 – Nathangrad