PHPスクリプトにてホスト名からIPアドレスを取得する際は
getenv()関数を用いるのが一般的だと思うのですが、
名前解決を行うDNSを指定して取得する方法はありますでしょうか。
具体的には、コマンドプロンプトのnslookup時に、
対話形式で「server DNS」で指定できる様な事を
PHPのスクリプトでも実現したいです。
PEARなどのライブラリを使用する方法でもOKですが、
導入予定のサーバーが共用レンタルサーバーの為、
サーバーにソフトをインストールする等の方法は導入が難しいです。
以上、宜しくお願い致します。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
PEARパッケージの Net_DNS を使うと簡単に引けますね。
確か単体利用可能だと思ったので、手元の環境が PHP 5.3.3 で Net_DNS2 を見てみたのですが、幸運にも他のライブラリには依存していなく単体で動作可能のようです。
なので、
http://pear.php.net/manual/ja/package.networking …
より Net_DNS2-1.0.1.tgz を取得して展開。
Net_DNS2-1.0.1/ というフォルダができるので、 Net_DNS2 という名前に変更。
後はFTP等でサーバの任意のディレクトリにアップロードします。
後は利用するときに set_include_path() で設置したディレクトリを include_path に追加します。
サンプルです。
+ public_html/
|
+ Net_DNS2/
+ sample.php
こんな構成にしてみます。
sample.php
<?php
// Net_DNS2 のディレクトリをinclude_path に含める
$libDir = dirname(__FILE__) .DIRECTORY_SEPARATOR .'Net_DNS2';
set_include_path(get_include_path() .PATH_SEPARATOR .$libDir);
// Net_DNS2 を呼ぶ
require_once "Net/DNS2.php";
// google の公開DNSに問合せをする
$r = new Net_DNS2_Resolver(array('nameservers' => array('8.8.8.8')));
try {
// www.google.com の Aレコードを問合せ
$result = $r->query('www.google.com', 'A');
foreach( $result->answer as $rec ) {
echo $rec->name .PHP_EOL;
}
}
catch(Exception $e) {
echo "Faild to query: ", $e->getMessage(), PHP_EOL;
}
こんな感じです。
#この構成ですと、ブラウザからNet_DNS2 にアクセス出来ちゃうので、.htaccess 等で直接アクセスできないよう対策は必要ですね。
#設置場所はよく検討したほうが良いと思いますが、構成が解らないのでとりあえず動きそうなサンプルにしました。
PHP5 より古い場合は Net_DNS の利用になると思います。
ぱっと見た感じ、こちらも単体で動作可能のようです。
http://pear.php.net/package/Net_DNS/
使い方もほぼ同じみたいですよ。
system 関数などでコマンドを実行するのもありですが、結果を自前でパースするのは面倒なので、こちらのほうが結果がオブジェクトになっているので使い勝手がいいかもしれませんね。
No.2
- 回答日時:
getenv()関数ってことは、自身のIPアドレス?
NATを使っていてサーバがプライベートIPだから、DNSを使ってグローバルIPを知りたいとか。
「ホスト名からIPアドレスを取得する際」に一般的なのは、gethostbyname()関数ですが。
http://jp2.php.net/manual/ja/function.gethostbyn …
任意のDNSサーバに対して問い合わせたいなら、Net_DNS_Resolver::query()でできます。
http://pear.php.net/manual/en/package.networking …
<?php
require_once 'Net/DNS.php';
$resolver = new Net_DNS_Resolver();
$resolver->nameservers = array('ns.example.com');
$response = $resolver->query('example.com');
if ($response) {
foreach ($response->answer as $rr) {
$rr->display();
echo inet_ntop($rr->rdata) . "\n";
}
}
?>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 10 インストールしたてのVirtualBoxの仮想マシンにDHCPで割り振られるIPアドレスにつきまして 1 2023/05/03 14:46
- VPN DNS「8.8.8.8」とは何なのでしょうか? 固定 IP アドレスで光回線の代わりに使えますか? 4 2022/10/17 16:30
- ネットワーク 自作のサーバーPCが自宅内のネットワークに接続できない 3 2023/01/24 16:58
- サーバー ネットワーク内のDNSについて 1 2022/12/11 11:13
- VPN 無料のwifiはなぜ危険性高い? VPN プライベートDNSモードにすれば安全? 2 2022/06/04 18:23
- サーバー ネットワークの構成に困っています 3 2023/07/05 11:55
- システム URLがクリックや入力されてから、ブラウザに画面が表示されるまでの間にDNSサーバーは経由されないの 2 2022/06/24 01:15
- Gmail SPFレコードとDNSサーバーについて、gmailを設定できるかどうか 2 2023/06/10 23:55
- その他(コンピューター・テクノロジー) DHCPサーバーについて、、、。 職場のネットワーク環境で困っています。サーバーはWindows s 3 2023/01/04 10:15
- その他(プログラミング・Web制作) このプログラミング誰か教えてくれませんか 4 2022/04/29 15:56
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
wordpressのルートのindex.php...
-
PHP/icludeを使った相対パスの...
-
深い階層のフォルダの作成や削...
-
フォントの色を変えるには?
-
onedrive にexcelファイルをア...
-
PHPで新しいウインドウで開く命...
-
別ファイルの変数を呼び出した...
-
バッチを用いたフォルダの自動移動
-
php.ini を設定を変更すると再...
-
form actionで二つ送信先を指定...
-
phpの中でphpを書けないか
-
「@$変数」の「@の意味は?」
-
リダイレクトでPOST
-
PHPで、エラーがない場合のみ画...
-
フォームで戻った際に入力済み...
-
Subversionのリポジトリの削除
-
PHP8を使うと、大量のWarningが...
-
VBSの「MsgBox」について
-
php5.6でsimplexml_load_string...
-
VBでクラウドストレージにア...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
index.phpに入るには、どうすれ...
-
include時の頭の良いパス指定に...
-
require_onceで読み込む場合、...
-
深い階層のフォルダの作成や削...
-
サイトパスに使用しているURLを...
-
.htaccessファイルの修正がこれ...
-
1つのcakePHPで複数のサイトを...
-
[PHP] 任意のDNSでIPアドレスを...
-
phpでページ分けする方法を教え...
-
PHP Linux から Windowsへの移行
-
zendのcontrollersについて
-
ゼンド フレイムワークがどうや...
-
mod_rewite?でのリダイレクト...
-
万国博覧会
-
歴史上の人物や宗教
-
PHPファイルが、そのまま見えて...
-
SSLに設置したらディレクトリパ...
-
変数値の渡し
-
ラミネート加工について
-
__FILE__をHTMLタグ内で使う
おすすめ情報