我正在使用PHP CURL向服务器发送请求。我需要做什么,服务器的响应将包含该服务器的IP地址?PHP curl,检索服务器IP地址
7
A
回答
15
这个可以可以用curl来完成,除了curl请求/响应之外没有其他的网络流量。 DNS请求通过curl来获得IP地址,这可以在详细报告中找到。所以:
- 打开CURLOPT_VERBOSE。
- 直接将CURLOPT_STDERR设置为 “php:// temp”流封装器资源。
- 使用preg_match_all(),解析IP地址为 的资源的字符串内容。
- 响应服务器地址将 位于匹配数组的零密钥 子数组中。
- 服务器递送 内容(假设成功 请求)的地址可以与 端()检索。任何干预的 服务器的地址也将在 的子阵列中依次排列。
演示:
$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
我不认为有一种方法可以直接从curl获取IP地址。
但这样的事情可以做的伎俩:
首先,做卷曲的请求,并使用curl_getinfo
来获取已被提取的“真实” URL - 这是因为,第一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/
然后,使用parse_url
提取的“主机”的部分从最终网址:
$host = parse_url($real_url, PHP_URL_HOST);
var_dump($host); // www.google.fr
最后,使用gethostbyname
吨Ø获得对应于该主机的IP地址:
$ip = gethostbyname($host);
var_dump($ip); // 209.85.227.99
嗯......
这是一个解决方案^^应该在大多数情况下,我想 - 虽然我不知道你会总是得到如果存在某种负载均衡机制,则为“正确”结果...
3
echo '<pre>';
print_r(gethostbynamel($host));
echo '</pre>';
这将为您提供与给定主机名关联的所有IP地址。
-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. PHP显示服务器IP地址
- 2. cURL IP地址
- 3. 服务器的IP地址
- 4. DNS服务器IP地址
- 5. tcp服务器ip地址
- 6. ip地址检索
- 7. cURL只检索URL地址
- 8. 使用PHP的gethostbyname检索IP地址()
- 9. Appengine服务器的IP地址块?
- 10. 查找服务器的IP地址
- 11. Google Cloud Messaging服务器的IP地址
- 12. 获取服务器IP地址
- 13. 获取IP地址当前服务器
- 14. 如何获取服务器IP地址?
- 15. 检索的IP地址与RKA IP地址的中间件
- 16. IP地址服务器块已结束域服务器块
- 17. 设置可以检测客户端IP地址的服务器
- 18. 检查多个服务器的IP地址多个nics powershell
- 19. 检测客户端和服务器的IP地址
- 20. 如何在PHP中标识服务器IP地址
- 21. PHP SwiftMailer - 具有多个IP地址的服务器
- 22. 使用PHP欺骗IP地址(无需服务器响应)
- 23. 在PHP中获取服务器的主机名或IP地址
- 24. 使用PHP更改服务器的ip地址
- 25. 从Tomcat会话ID检索IP地址?
- 26. Word VBA检索IP地址“静默”
- 27. 如何检索Meteorjs上的IP地址?
- 28. 检查IP地址
- 29. 使用服务器名称或IP地址创建本地链接服务器?
- 30. 在服务器端获取本地IP地址的非服务器端方法?
服务器由多个正在运行的实例组成,因此我需要确切地找出连接到哪个服务器并响应特定的CURL请求。 – Beier 2009-09-02 20:06:42