クライアント側の Javascript を使用して、クライアントのコンピューターから見た DNS ルックアップ (ホスト名から IP アドレスへ) を実行したいと考えています。それは可能ですか?
16 に答える
編集:この質問は私にかゆみを与えたので、クライアントのIPアドレスを返すJSONP WebサービスをGoogle App Engineに配置しました。使用法:
<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>
サーバープロキシは必要ありません。
純粋な JS はできません。それを出力する同じドメインの下にサーバー スクリプトがある場合は、XMLHttpRequest を送信してそれを読み取ることができます。
JavaScript 標準ライブラリには、ホストや IP アドレスの概念はありません。そのため、外部サービスにアクセスしてホスト名を検索する必要があります。
ホスト名の IP アドレスを検索し、javascript 経由でアクセスする cgi-bin をホストすることをお勧めします。
ホストされた JSONP バージョンは魅力的に機能しますが、ほとんどの日 (東部時間) の夜間にリソースを使い果たすように思われるため、独自のバージョンを作成する必要がありました。
これは私がPHPでそれを達成した方法です:
<?php
header('content-type: application/json; charset=utf-8');
$data = json_encode($_SERVER['REMOTE_ADDR']);
echo $_GET['callback'] . '(' . $data . ');';
?>
次に、Javascript は以前とまったく同じですが、配列ではありません。
<script type="application/javascript">
function getip(ip){
alert('IP Address: ' + ip);
}
</script>
<script type="application/javascript" src="http://www.anotherdomain.com/file.php?callback=getip"> </script>
そのような単純な!
補足: 公開環境でこれを使用している場合は、必ず $_GET をクリーンアップしてください!
これは古い質問であることは承知していますが、私の解決策は他の人を助けるかもしれません。
これを簡単にする JSON(P) サービスは永遠に続くわけではありませんが、執筆時点では次の JavaScript がうまく機能します。
<script type="text/javascript">function z (x){ document.getElementById('y').innerHTML=x.query }</script>
<script type='text/javascript' src='http://ip-api.com/json/zero.eu.org?callback=z'></script>
上記はサーバーのIPをページに書き込みますが、「zero.eu.org」を別のドメイン名に変更することで、スクリプトを変更して任意のIPを見つけることができます。これは、http: //meon.zero.eu.org/の私のページで実際に見ることができます。
これを行うには、ブラウザーのサンドボックスを解除する必要があります。サーバーにルックアップを実行させ、XmlHttp を介してクライアント側からそれを要求してみてください。
質問が尋ねるように、純粋な JavaScript コンテキストでは、セキュリティ上の理由から、これがほとんどのブラウザーで許可されているとは思いません。
ポイントを逃したかもしれませんが、NAVY の担当者への返信として、ブラウザが「リクエスタの」IP アドレスを知る方法を以下に示します (ただし、サービス プロバイダのみである可能性があります)。
負荷分散されていない別のサーバーを呼び出す (src が指す src を持つ) クライアントによってレンダリングされるページにスクリプト タグを配置します (これは、2 番目のサーバーにアクセスする必要があることを意味しますが、最近のホスティングは安価であり、これを簡単かつ安価に設定します)。
これは、クライアント ページに追加する必要がある種類のコードです。
他のサーバー「someServerIown」には、ASP、ASPX、または PHP ページが必要です。
----- 次のようなサーバー コードが含まれています。
"<% Response.Write("var clientipaddress = '" & Request.ServerVariables("REMOTE_ADDR") & "';") %>" (外側の dbl 引用符なし:-))
---- そして、このコードを script タグに書き戻します:
var clientipaddress = '178.32.21.45';
これにより、ページ上の Javascript でアクセスできる Javascript 変数が効果的に作成されます。
うまくいけば、この var にアクセスして、値をフォーム コントロールに書き込んで、返送できる状態にします。
ユーザーが次のリクエストを投稿または取得すると、Javascript および/またはフォームは、「otherServerIown」が入力した変数の値を、希望するサーバーに送り返します。
これは、クライアントの IP アドレスをマスクし、ロード バランサーの IP アドレスとして表示する、私たちが持っているダム ロード バランサーを回避する方法です .... ダム ... ダム ダム ダム!
個々の状況は少し異なるため、正確な解決策は示していません。ただし、コンセプトは健全です。また、HTTPS ページでこれを行う場合、「otherServerIOwn」もその安全な形式で配信する必要があることに注意してください。そうしないと、クライアントは混合コンテンツに対して警告を受けます。https がある場合は、すべての証明書が有効であることを確認してください。そうしないと、クライアントにも警告が表示されます。
それが誰かを助けることを願っています! 申し訳ありませんが、回答/貢献するのに1年かかりました。:-)
私のバージョンは次のようなものです:
私のサーバー上のphp:
<?php
header('content-type: application/json; charset=utf-8');
$data = json_encode($_SERVER['REMOTE_ADDR']);
$callback = filter_input(INPUT_GET,
'callback',
FILTER_SANITIZE_STRING,
FILTER_FLAG_ENCODE_HIGH|FILTER_FLAG_ENCODE_LOW);
echo $callback . '(' . $data . ');';
?>
ページ上の jQuery:
var self = this;
$.ajax({
url: this.url + "getip.php",
data: null,
type: 'GET',
crossDomain: true,
dataType: 'jsonp'
}).done( function( json ) {
self.ip = json;
});
クロスドメインで動作します。ステータスチェックを使用できます。それに取り組んでいます。
クライアントに Java がインストールされている場合は、次のようにすることができます。
ipAddress = java.net.InetAddress.getLocalHost().getHostAddress();
それ以外は、おそらくサーバー側スクリプトを使用する必要があります。