这可以通过卷曲来完成,除了卷曲请求/响应之外没有其他网络流量的优点.通过curl发出DNS请求以获取IP地址,可以在详细报告中找到.所以:
>打开CURLOPT_VERBOSE.
>将CURLOPT_STDERR直接指向a
“php:// temp”流包装器资源.
>使用preg_match_all(),解析
资源的ip字符串内容
地址(ES).
>响应的服务器地址将
在匹配数组的零键
子阵.
>服务器交付的地址
内容(假设成功
请求)可以检索
结束().任何介入
服务器的地址也将在
子阵列,按顺序排列.
演示:
$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;
}
}