次のページ(http://l2.io/ip など)からjavascriptを使って自分のIPアドレスを読み取り、変数"myIp"に保存したいと思っています。
function getMyIP() {
var myIp;
...
return myIp;
}
どうすればいいのでしょうか?
リンク先]1を確認すると、?var=desiredVarName
パラメータを渡すスクリプトタグが含まれており、このパラメータにはIPアドレスを含むグローバル変数が設定されています。
<script type="text/javascript" src="http://l2.io/ip.js?var=myip"></script>
<!-- ^^^^ -->
<script>alert(myip);</script>
[Demo][2].
プロキシを使ったり、リクエストヘッダを偽装したりして、簡単になりすましができることは言うまでもないと思いますが、いずれにしても指摘しておくべきでしょう。
参考にしてください。
ページがhttps
プロトコルで提供されている場合、ほとんどのブラウザはhttp
プロトコルで提供されている同じページ内のコンテンツ(スクリプトや画像を含む)をブロックするため、選択肢はかなり限られています。一日のヒット数が5kであれば、[Smart IP API][3]を利用することができます。例えば、以下のようになります。
<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>
[Demo][4]を参照してください。
編集:どうやら、この 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>
[3]: https://smart-ip.net/geoip-api [4]: