101

クライアント側の Javascript を使用して、クライアントのコンピューターから見た DNS ルックアップ (ホスト名から IP アドレスへ) を実行したいと考えています。それは可能ですか?

4

16 に答える 16

79

編集:この質問は私にかゆみを与えたので、クライアントの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 を送信してそれを読み取ることができます。

于 2008-09-19T15:14:55.637 に答える
38

JavaScript 標準ライブラリには、ホストや IP アドレスの概念はありません。そのため、外部サービスにアクセスしてホスト名を検索する必要があります。

ホスト名の IP アドレスを検索し、javascript 経由でアクセスする cgi-bin をホストすることをお勧めします。

于 2008-09-19T15:13:49.867 に答える
13

ホストされた 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 をクリーンアップしてください!

于 2011-08-18T20:08:43.080 に答える
2

これは古い質問であることは承知していますが、私の解決策は他の人を助けるかもしれません。

これを簡単にする 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/の私のページで実際に見ることができます。

于 2015-04-22T09:24:07.003 に答える
0

これを行うには、ブラウザーのサンドボックスを解除する必要があります。サーバーにルックアップを実行させ、XmlHttp を介してクライアント側からそれを要求してみてください。

于 2008-09-19T15:14:02.893 に答える
-2

質問が尋ねるように、純粋な JavaScript コンテキストでは、セキュリティ上の理由から、これがほとんどのブラウザーで許可されているとは思いません。

于 2008-09-19T15:12:22.023 に答える
-3

ポイントを逃したかもしれませんが、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年かかりました。:-)

于 2013-09-05T22:13:02.870 に答える
-4

私のバージョンは次のようなものです:

私のサーバー上の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;

});

クロスドメインで動作します。ステータスチェックを使用できます。それに取り組んでいます。

于 2014-05-29T16:17:51.080 に答える
-13

クライアントに Java がインストールされている場合は、次のようにすることができます。

ipAddress = java.net.InetAddress.getLocalHost().getHostAddress();

それ以外は、おそらくサーバー側スクリプトを使用する必要があります。

于 2008-09-19T15:12:50.057 に答える