15

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

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

どうすればできますか?

4

7 に答える 7

35

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

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

デモ

これが (プロキシまたはなりすましのリクエスト ヘッダーのいずれかを使用して) 簡単になりすますことができると言う必要はないと思いますが、いずれにせよ注意する価値があります。


HTTPS サポート

ページがプロトコルを使用して提供される場合、ほとんどのブラウザーは、プロトコルを使用して提供される同じページのコンテンツ(スクリプトと画像を含む)httpsをブロックするため、オプションはかなり制限されます。http1 日あたりのヒット数が 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>
于 2013-07-01T23:01:24.167 に答える
14
    $.ajax({
        url: '//freegeoip.net/json/',
        type: 'POST',
        dataType: 'jsonp',
        success: function(location) {
            alert(location.ip);
        }
    });

これはhttpsでも機能します

于 2014-09-03T15:35:51.073 に答える
9

より信頼性の高い REST エンドポイントは、http://freegeoip.net/json/です。

地理的位置とともに IP アドレスも返します。また、クロスドメイン リクエストが有効になっているため (Access-Control-Allow-Origin: *)、JSONP に関するコーディングは不要です。

于 2014-06-06T13:56:36.310 に答える
3

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 呼び出しを使用できます。

于 2016-04-06T12:24:26.077 に答える
0

これにより、クライアント情報も引き戻されます。

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'))
于 2014-03-09T22:39:23.527 に答える