Ben bir sunucuya bir istek göndermek için PHP CURL kullanıyorum. Ne sunucudan yanıt bu sunucunun IP adresini içerecek bunu yapmak gerekiyor?
Bu can kıvırmak istek / yanıt dışında hiçbir ağ trafiğini sahip olmanın avantajı ile, kıvrılma ile yapılabilir. DNS istekleri ayrıntılı raporda bulunabilir ip adreslerini almak için curl tarafından yapılır. Yani:
Demo:
$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;
}
}
I don't think there is a way to get that IP address directly from curl.
But something like this could do the trick :
Birincisi, kıvırmak isteği yapmak, ve curl_getinfo
a> getirilen olmuştur "gerçek" URL almak için kullanabileceğiniz - ilk URL başka birine yönlendirebilir çünkü bu, ve istediğiniz son biri:
$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/
Ardından, parse_url
a> bu son URL'den "ev sahibi" kısmını ayıklamak için kullanabilirsiniz:
$host = parse_url($real_url, PHP_URL_HOST);
var_dump($host); // www.google.fr
Ve son olarak, kullanmak gethostbyname
a> bu ana karşılık IP adresini almak için:
$ip = gethostbyname($host);
var_dump($ip); // 209.85.227.99
Well...
That's a solution ^^ It should work in most cases, I suppose -- though I'm not sure you would always get the "correct" result if there is some kind of load-balancing mecanism...
AFAIK Eğer 'kuvvet' sunucuyu tepki size onun IP adresini göndermek için yapamam. Neden doğrudan onu aramak değil? (this question/answers for how to do that from php edin)
Ben bunu kullandı
<?
$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.";
}
?>
Buradan: http://php.net/manual/en/function.gethostbynamel.php