人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHP MySQL

あるサーバーに設置してあるPHPスクリプトから外部のMySQLサーバーに mysql_query()関数で接続&実行しようとしています。

その際、PHPスクリプトが利用するIPアドレスを知りたいのですが、どうすれば良いでしょうか?
サーバーのIPアドレスではないようで、MySQL接続は別のIPで接続しているようです。

MySQL側のアクセスログやコマンド操作できればいいのですが、それは出来ない状態です。

PHPスクリプト側で接続時に利用しているIPアドレスを知る方法を教えて下さい。

●質問者: webtomake
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● だわかき
●25ポイント

mysql_queryを実行する前に、mysql_connectまたはmysql_pconnectが実行されているはずで、そこにデータベースのIPアドレスまたはホスト名が記述されています。

ホスト名からIPアドレスを調べるのは、
Windowsなら

nbtstat -a ホスト名

Linuxなら

nslookup ホスト名

2 ● JULY
●25ポイント

もし、接続できているのであれば、

select host from information_schema.processlist WHERE ID=connection_id()

というクエリーを投げると、接続中のクライアントに対するサーバ側から見たホスト名、または、IP アドレスが分かると思います。

ただ、
MySQL :: MySQL 5.1 リファレンスマニュアル :: 21.22 INFORMATION_SCHEMA PROCESSLIST テーブル

PROCESSLIST テーブルは非標準のテーブルです。それは MySQL 5.1.7 に追加されています。

なので、古い MySQL だとダメかもしれません。


webtomakeさんのコメント
>もし、接続できているのであれば、 接続できていません

JULYさんのコメント
う?ん、だとすれば、 > MySQL側のアクセスログやコマンド操作できればいいのですが、それは出来ない状態です。 この状況ではかなり難しいかと...。 ひとつ考えられるのは、2つのサーバの間で NAT されている場合です。経路中のルータ等で NAT されている場合、クライアント側では、自分自身がどんな IP アドレスに変換されているかは、原理的に知りようがありません。何らかの接続が出来てしまえば、サーバ側が「この接続はどこそこからの IP アドレスからの接続だよ」と教えてもらうことで、NAT 後の IP アドレスを知る事ができ、私の回答もこのシナリオを想定したものです。 Web サイトで、「あなたのグローバルアドレスはこれこれです」というのを教えてくれるサイトがありますが、PHP を置いているサーバからこれらのサーバにアクセスし、表示される IP が、MySQL のサーバから見た時のアドレスと同じ可能性はありますが、2つのサーバのネットワーク上の経路も分からないですし、そもそも、インターネット側へ繋がらなければ意味が無い方法ですし....。 PHP のあるサーバ側に複数の IP アドレスがあって、というのであれば、そのサーバでパケットキャプチャしてみるのが早いと思いますが、経路中で NAT されている場合だと意味が無いし...。

3 ● kaji0120
●25ポイント

>PHPスクリプト側で接続時に利用しているIPアドレスを知る方法を教えて下さい。
PHPで

<?php
print_r($_SERVER);
?>

の出力結果に書かれていませんか?


4 ● TransFreeBSD
●25ポイント

ifconfigコマンドで割り当てられているアドレスが得られます。

<?php
echo "<pre>";
system("/sbin/ifconfig");
echo "</pre>";

こんなスクリプト作って確認してみてください。
ズラズラっと色々な情報が書かれていますが「inet addr:」または「inet6 addr:」の後のが割り当てられているアドレスです。
通常2つ以上あります。
127.0.0.1は所謂localhostなので除外します。
::1/128も所謂localhostなので除外します。
設定してダメだったというIPアドレスもあるかもしれません。それも除外します。
SQLサーバのIPアドレスがIPv4ならこちらもIPv4(inet addr:)、IPv6ならIPv6(inet6 addr:)になります。
SQLサーバのIPアドレスが分かるなら、それと一番似ている(前のほうが同じ)アドレスがあれば、多分それです。
たぶん、「10.」または「192.168.」で始まるのではないかと予想しています。

ところで、PHP中ではSQLサーバをIPアドレスで指定していますか?
もし違うなら、そもそもそのホスト名でSQLサーバにアクセス出来ていますか?
コントロールパネルの一番下のあたりにあるNetwork Toolsを使ってIPアドレスを確認してみてください。
さらにそのIPアドレスでコントロールパネルにアクセスして目的のSQLサーバか確認してみてください。
さらにrouge_2008さんも書かれていますが、そのSQLサーバのMySQLにユーザとパスワードが正しく登録されているか確認してみてください。
そしてそのIPアドレスは「10.」または「192.168.」で始まっていますか?WebサーバのIPアドレスとくらべてどうですか?
WebサーバもSQLサーバもskynethostingならどちらも似たようなIPアドレスになるはずです。
「10.」または「192.168.」で始まっているなら前述の方法で調べてみてください。
Webサーバとして割り当てているはずのグローバルIPアドレスに近いなら、そのWebサーバのアドレスでアクセスしているはずです。

それでもダメならJULYさんの言うようにNAT越しの可能性もあるかも知れません。
そうなると普遍的な確認方法は無いと思いますが、ただ、その可能性は低いのではと思います。
どちらにせよ、特別設定が必要ならどこかに確認方法が書かれたドキュメントがあると思うのですが……

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ