使用不同的名称服务器解析PHP中的主机名

使用不同的名称服务器解析PHP中的主机名,php,dns,nslookup,Php,Dns,Nslookup,如何使用PHP将主机名解析为IP地址, 但是使用不同的名称服务器(例如or) 似乎dns\u get\u record()或gethostbyname()无法使用与系统上当前设置的名称服务器不同的名称服务器(在TCP/IP设置或/etc/resolv.conf中) 我发现的唯一方法是使用PEAR类Net/DNS,但在PHP5.4下它会给我很多警告(PEAR中也有) $host = 'stackoverflow.com'; $dns = '8.8.8.8'; // Google Public D

如何使用PHP将主机名解析为IP地址, 但是使用不同的名称服务器(例如or)

似乎
dns\u get\u record()
gethostbyname()
无法使用与系统上当前设置的名称服务器不同的名称服务器(在TCP/IP设置或
/etc/resolv.conf
中)


我发现的唯一方法是使用PEAR类Net/DNS,但在PHP5.4下它会给我很多警告(PEAR中也有)

$host = 'stackoverflow.com';
$dns = '8.8.8.8';  // Google Public DNS

$ip = `nslookup $host $dns`; // the backticks execute the command in the shell

$ips = array();
if(preg_match_all('/Address: ((?:\d{1,3}\.){3}\d{1,3})/', $ip, $match) > 0){
    $ips = $match[1];
}

print_r($ips);

注意:如果
$host
$dns
来自用户输入,请使用
escapeshellarg

是否可以通过exec运行python脚本并读取shell输出?我在urllib2中看到了同样的问题,所以这里:@DeaconDesperado:为什么要使用python脚本?如果您可以在PHP中执行
exec
,为什么不直接调用unix
host
命令呢
exec('host google.com 8.8.8.8')
?@Rocket,只是建议我熟悉的内容,因此是评论而不是回答;)不错的选择,但我希望速度快一点。exec()实际上分叉并使用管道重定向stdin和stdout。这是一个非常昂贵的操作,在我的情况下,这将是CPU资源的浪费。看起来很有希望,会很快给你反馈一次'Net/DNS2.php'$解析程序=新的网络解析程序(数组('nameservers'=>array('8.8.8.8'))$resp=$resolver->query(“hooktube.com.”,“A”);印刷费($resp);echo$resp->应答[0]->地址;这是可能的,如果一个访问者的IP访问我的网站。访问者是否使用DNS访问Google?是的,但不需要使用dns2。apache/php为此提供了$服务器[REMOTE\u ADDR]。如果不确定,请打印($\服务器)或询问有关问题。对不起。想知道我的网站的访问者是否使用谷歌公共dns?@jcarlosweb:对不起,我不明白你在问什么。对不起。要知道我的网站的访问者是否使用谷歌公共dns?没有办法检测到这一点。你为什么需要这些信息?我收到了这些回复。请注意,雅虎网站上写着:“地址”C:\Users\User>nslookup slavi-2016-05-04.com 8.8.8服务器:google-public-dns-a.google.com地址:8.8.8***google-public-dns-a.google.com找不到slavi-2016-05-04.com:不存在域C:\Users\User>nslookup雅虎.com 8.8.8服务器:google-public-dns-a.google.com地址:8.8.8.8非权威答案:名称:yahoo.com地址:2001:4998:58:c02::a9 2001:4998:c:a06::2:4008 2001:4998:44:204::a7 98.138.253.109 98.139.183.24 206.190.36.45
<?
require_once 'Net/DNS2.php';

$resolver = new Net_DNS2_Resolver( array('nameservers' => array('208.67.222.123')) );

$resp = $resolver->query("hooktube.com.", 'A');

print_r($resp);

echo $resp->answer[0]->address;