Устранение имени хоста в PHP с использованием другого сервера имен

Как я могу разрешить имя хоста для IP-адреса с помощью PHP, но используя другой сервер имен (например OpenDNS или общедоступный DNS Google).

Не похоже, что dns_get_record() или gethostbyname() могут использовать другой сервер имен, чем тот, который в настоящий момент настроен в системе (в настройках TCP/IP или в /etc/resolv.conf).

Единственный способ, который я нашел, - использовать класс PEAR Net/DNS, но он дает мне много предупреждений в разделе PHP 5.4

Ответ 1

Попробуйте net_dns2 (это также в PEAR).

Ответ 2

<?
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;

Ответ 3

Если вам разрешено запускать сценарии оболочки из вашего script, вы можете использовать команду system nslookup.

$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);

Примечание: используйте escapeshellarg, если $host и $dns находятся на входе пользователя.