PHP CURLを使用してサーバにリクエストを送信しています。サーバーからの応答にそのサーバーのIPアドレスが含まれるようにするには、何が必要ですか?PHP Curl、サーバのIPアドレスを取得する
7
A
答えて
15
このはとする必要があります。カール要求/応答以外のネットワークトラフィックがないという利点があります。 DNS要求はcurlによってIPアドレスを取得するために作成されます。これは冗長なレポートにあります。したがって:
- CURLOPT_VERBOSEをオンにします。
- 直接CURLOPT_STDERRから 「php:// temp」ストリームラッパーリソース。
- preg_match_all()を使用して、 アドレスのリソースの文字列コンテンツを解析します( )。
- 応答するサーバーのアドレスは で、一致する配列のゼロキー サブアレイになります。
- (成功 要求を仮定) コンテンツを配信するサーバのアドレスが 端()で取得することができます。間に入るサーバのアドレス も、サブアレイ に順番に格納されます。
デモ:
$url = 'http://google.com';
$wrapper = fopen('php://temp', 'r+');
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_STDERR, $wrapper);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
$ips = get_curl_remote_ips($wrapper);
fclose($wrapper);
echo end($ips); // 208.69.36.231
function get_curl_remote_ips($fp)
{
rewind($fp);
$str = fread($fp, 8192);
$regex = '/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/';
if (preg_match_all($regex, $str, $matches)) {
return array_unique($matches[0]); // Array([0] => 74.125.45.100 [2] => 208.69.36.231)
} else {
return false;
}
}
0
AFAIKでは、サーバーが応答で自分のIPアドレスを送信するよう強制することはできません。直接見上げてみませんか? (チェックthis question/answers for how to do that from php)
3
カールから直接IPアドレスを取得する方法はないと思います。
しかし、このようなものは、トリックを行うことができます:
まず、カール要求を行うと、フェッチされた「本当の」URLを取得するためにcurl_getinfo
を使用 - これは最初のURLを別のものにリダイレクトすることができますされているために、あなたは、最終的なものをしたい。そして、
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.google.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$content = curl_exec($ch);
$real_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
curl_close($ch);
var_dump($real_url); // http://www.google.fr/
、その最後のURLから「ホスト」の部分を抽出するためにparse_url
を使用します。
$host = parse_url($real_url, PHP_URL_HOST);
var_dump($host); // www.google.fr
そして、最後に、gethostbyname
トンを使用しますOそのホストに対応したIPアドレスを取得:
$ip = gethostbyname($host);
var_dump($ip); // 209.85.227.99
うーん... それはほとんどのケースで動作するはずです^^ソリューションです
は、私は考えます - 私はわからないけれども、あなたがいつもなるだろうあなたに与えられたホスト名に関連付けられているすべてのIPアドレスを与えること
3
echo '<pre>';
print_r(gethostbynamel($host));
echo '</pre>';
...ロードバランシングmecanismのいくつかの種類がある場合に生じる「修正」。
-1
私はここからこの1
<?
$hosts = gethostbynamel($hostname);
if (is_array($hosts)) {
echo "Host ".$hostname." resolves to:<br><br>";
foreach ($hosts as $ip) {
echo "IP: ".$ip."<br>";
}
} else {
echo "Host ".$hostname." is not tied to any IP.";
}
?>
3
私はあなたと、サーバからIPアドレスを取得することができるはずだと思います。
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://stackoverflow.com");
curl_exec($ch);
$ip = curl_getinfo($ch,CURLINFO_PRIMARY_IP);
curl_close($ch);
echo $ip; // 151.101.129.69
関連する問題
- 1. 取得IPアドレス
- 2. IPアドレスを取得
- 3. IPアドレスの取得
- 4. 私のIPアドレスを取得する
- 5. クライアントマシンのIPアドレスを取得
- 6. エミュレータのシステムIPアドレスを取得する
- 7. ローカルIPアドレスの取得
- 8. PHPを使ったApacheサーバのIPアドレスを変更する
- 9. コンソールアプリケーションでIPアドレスを取得する
- 10. JSPでIPアドレスを取得する
- 11. ピラミッドでリクエストIPアドレスを取得する
- 12. LinuxでマルチキャストソースIPアドレスを取得する
- 13. GrailsでIPアドレスを取得する
- 14. リモートホストIPアドレスを取得するQTcpServer
- 15. Google App Engine + PythonでIPアドレスを取得
- 16. zendフレームワークでユーザIPアドレスを取得
- 17. 迷惑メールラーベルスホームステードhttpサーバIPアドレス
- 18. Retrive MAC ...私はMACのIPアドレスをアドレス取得するLINQ
- 19. システムのIPアドレスとMACアドレスを取得する
- 20. 私は私のIPアドレスをPHPで取得できません
- 21. IPアドレスでローカルホストのWebページを取得
- 22. AIR 1.0アプリケーションのIPアドレスを取得
- 23. PHPディスプレイサーバーのIPアドレス
- 24. クライアント/ユーザのIPアドレスを取得する方法は?
- 25. Netty:messageReceivedでのリモートIPアドレスの取得
- 26. Java RMIで発信IPアドレスを取得
- 27. IPアドレスでホスト名を取得Android
- 28. QtでローカルIPアドレスを取得
- 29. HTML形式のドメイン(アドレス)IPを取得する
- 30. Rails 3 - IPアドレスの取得と比較
サーバーは複数の実行インスタンスで構成されているため、特定のCURLリクエストに接続して応答したサーバーを正確に把握する必要があります。 – Beier