2009-06-25 16 views
1

JavaScriptを使用してユーザのIPアドレスを取得することはできますか?もしそうなら、どうですか?JavaScript:ユーザーはどのようにIPアドレスを取得するのですか?

+1

基本的にここにJSONで解決されhttp://stackoverflow.com/questions/391979/get-client-ip-using-just-javascript – merkuro

+1

の正確な複製:http://stackoverflow.com//102605/can-i-lookup-the-host-of-a-hostname-from-javascript – Vladiat0r

答えて

1

私はそうは思わない。サーバー側の言語を使用する必要があります。またはAJAXで使用できるサービスを見つけることもできますが、もし存在するかどうかはわかりません。

0

いいえ厳密にはクライアント側であるため、IPアドレスを見つけるためにいくつかのセカンダリ技術が使用されます。

Google検索には多くのオプションがあります。

+0

この二次サービスの例を挙げてください。また、どのようにすればそれは* my * Webサーバーが要求を転送することになるので...セカンダリサービスは単にクライアントブラウザではなくWebサーバーのIPアドレスを返します。 –

+0

私は実際に '二次的技術'あなたのサーバー上で動作するPHPや.NETなど。あなたの質問では、あなたができない唯一のJavaScriptを使用できるかどうか特別に尋​​ねました。サーバー側のスクリプトにその情報を提供する必要があります。 PrototypeまたはjQueryを使用している場合は、簡単にAJAXリクエストを実行して、必要な値を返すことができます。 詳細については、上記の関連する質問をお勧めします。http://javascript.about.com/library/blip.htmを参照してください.Java、PHP、ASP、.NET、およびCFでそれを行う方法について概説しています。 – Paulo

0

リクエスタのIPアドレスを示すオンラインサービスの1つを使用してはどうでしょうか。私はhtmlビューのコンテキストでそれらを見ただけです。しかし私の考えは、あなたが何らかの要求をして、応答がIP情報を含んでいるということです。

0

私は実際にこれで自分自身を悩んでいます。 WebRTCでJavaScriptを使用している特定のブラウザを使用している場合、ユーザーのローカルIPアドレスを取得できます。 WebRTCは現在Chrome、Firefox、Operaでサポートされているため、すべてのブラウザで動作するわけではありません。大きな解決策は、先にHow to get client’s IP address using javascript only?という質問でmidoによって提供されています。

これは現在変更しようとしているコードなので、IPアドレスを単に変数を表示するのではなく変数に保存できます。私はまだその部分を分かっていないが、それはあなたを助けるはずです。カットしてテキストファイルに貼り付け、ブラウザで開きます。

<html> 
<body> 

<p id=saveIP> Replace this with IP </p> 

<script> 

function findIP(onNewIP) { // onNewIp - your listener function for new IPs 
    var myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection; //compatibility for firefox and chrome 
    var pc = new myPeerConnection({iceServers: []}), 
    noop = function() {}, 
    localIPs = {}, 
    ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g, 
    key; 
    //window.saveIP = pc; 
    //window.saveIP = localIPs; // Returns [object, object] or JSON.stringfy returns {} 

    function ipIterate(ip) { 
    if (!localIPs[ip]) onNewIP(ip); 
    localIPs[ip] = true; 
    } 
    pc.createDataChannel(""); //create a bogus data channel 
    pc.createOffer(function(sdp) { 
    sdp.sdp.split('\n').forEach(function(line) { 
     if (line.indexOf('candidate') < 0) return; 
     line.match(ipRegex).forEach(ipIterate); 
}); 
    pc.setLocalDescription(sdp, noop, noop); 
    }, noop); // create offer and set local description 
    pc.onicecandidate = function(ice) { //listen for candidate events 
    if (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(ipRegex)) return; 
    ice.candidate.candidate.match(ipRegex).forEach(ipIterate); 
    }; 
} 


var ul = document.createElement('ul'); 
ul.textContent = 'Your IPs are: ' 
document.body.appendChild(ul); 

function addIP(ip) { 
    console.log('got ip: ', ip); 
    var li = document.createElement('li'); 
    li.textContent = ip; 
    window.saveIP = ip; // <--value captured is [object HTMLParagraph]; JSON.stringify returns {} 
    ul.appendChild(li); 
} 

findIP(addIP); 
document.getElementById('saveIP').innerHTML = JSON.stringify(window.saveIP); 
</script> 
</body> 
</html> 
関連する問題