web-dev-qa-db-ja.com

サードパーティのWebサービスを介してクライアントIPアドレスを取得する

Javascriptを使用して変数「myIp」に保存して、次のページ( http://l2.io/ip またはその他)からIPアドレスを読み取りたいと思います。

function getMyIP() {
  var myIp;
  ...
  return myIp;
}

どうすればいい?

15
Milton90

リンク先サイト を確認すると、IPアドレスを含むグローバル変数として設定される?var=desiredVarNameパラメーターを渡すスクリプトタグを含めることができます。

<script type="text/javascript" src="http://l2.io/ip.js?var=myip"></script>
                                                      <!-- ^^^^ -->
<script>alert(myip);</script>

デモ

これは(プロキシまたはスプーフィングされたリクエストヘッダーを使用して)簡単にスプーフィングされる可能性があると言う必要はありませんが、いずれにしても注目に値します。


HTTPSサポート

ページがhttpsプロトコルを使用して提供される場合、ほとんどのブラウザーはhttpプロトコル(スクリプトと画像を含む)を使用して提供される同じページのコンテンツをブロックするため、オプションはかなり制限されます。 1日あたり5,000件未満のヒットがある場合、 Smart IP API を使用できます。例えば:

<script>
var myip;
function ip_callback(o) {
    myip = o.Host;
}
</script>
<script src="https://smart-ip.net/geoip-json?callback=ip_callback"></script>
<script>alert(myip);</script>

デモ

編集:どうやら、このhttpsサービスの証明書の有効期限が切れているため、ユーザーは手動で例外を追加する必要があります。 APIを直接開いて、証明書の状態を確認します。 https://smart-ip.net/geoip-json


バックエンドロジックを使用

バックエンドサーバーロジックを使用する場合の最も復元力のあるシンプルな方法は、リクエスターのIPを<script>タグ内に単純に出力することです。これにより、外部リソースに依存する必要がなくなります。例えば:

PHP:

<script>var myip = '<?php echo $_SERVER['REMOTE_ADDR']; ?>';</script>

また、より堅牢なPHPソリューション(プロキシによって設定されることがあるヘッダーを考慮する))もこの 関連する回答 にあります。

C#:

<script>var myip = '<%= Request.UserHostAddress %>';</script>
33
    $.ajax({
        url: '//freegeoip.net/json/',
        type: 'POST',
        dataType: 'jsonp',
        success: function(location) {
            alert(location.ip);
        }
    });

これもhttpsで動作します

14
Ranjit Kumar

より信頼できるREST=エンドポイントは http://freegeoip.net/json/

ジオロケーションとともにIPアドレスも返します。また、クロスドメインリクエストが有効になっているため(Access-Control-Allow-Origin:*)、JSONPをコード化する必要がありません。

9
Dayson

CORSの問題に直面した場合は、 https://api.ipify.org/ を使用できます。

function httpGet(theUrl)
{
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.open( "GET", theUrl, false );
    xmlHttp.send( null );
    return xmlHttp.responseText;
}


publicIp = httpGet("https://api.ipify.org/");
alert("Public IP: " + publicIp);

同期HTTP呼び出しを使用するのは得策ではないことに同意します。その後、非同期ajax呼び出しを使用できます。

3
Soumya Kanti
    <script type="application/javascript">
            function getip(json){
            alert(json.ip); // alerts the ip address
    }
    </script>

    <script type="application/javascript" src="http://jsonip.appspot.com/?callback=getip"></script>
1
bd_person

これにより、クライアント情報もプルバックされます。

var get = function(u){
    var x = new XMLHttpRequest;
    x.open('GET', u, false);
    x.send();
    return x.responseText;
}

JSON.parse(get('http://ifconfig.me/all.json'))
0
John Williams

HTMLでスクリプトをインポートすると...

_<script type="text/javascript" src="//stier.linuxfaq.org/ip.php"></script>
_

その後、ページ上の任意の場所で変数userIP(訪問者のIPアドレス)を使用できます。

リダイレクトするには:<script>if (userIP == "555.555.555.55") {window.location.replace("http://192.168.1.3/flex-start/examples/navbar-fixed-top/");}</script>

または、ページに表示するには:document.write (userIP);

免責事項:私は、インポートするように言ったスクリプトの著者です。スクリプトは、PHPを使用してIPを作成します。スクリプトのソースコードは次のとおりです。

<?php //Gets the IP address $ip = getenv("REMOTE_ADDR") ; Echo "var userIP = '" . $ip . "';"; ?>

0
Kenny Stier