Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

How I can resolve hostname to IP address using PHP, but using different nameserver (eg. OpenDNS or Google Public DNS ).

It not seem that dns_get_record() or gethostbyname() are able to use a different nameserver than one currently set up on the system (in TCP/IP settings or in /etc/resolv.conf ).

The only way I've found is using PEAR class Net/DNS, but it gives me lots of warnings under PHP 5.4

Is it an option to run a python script through exec and just read the shell output? I've seen this same problem solved in urllib2 on SO here: stackoverflow.com/questions/2236498/… DeaconDesperado Jul 19, 2012 at 16:20 @DeaconDesperado: Why use a python script? If you can exec in PHP, why not just call the unix host command? exec('host google.com 8.8.8.8') ? gen_Eric Jul 19, 2012 at 18:07 @Rocket, just suggesting what I was familiar with, hence the comment rather than answer ;) DeaconDesperado Jul 19, 2012 at 18:12 good choice, but I want it to be fast. exec() actually forks and uses pipes to redirects the stdin and stdout. This is quite costly operation and in my case will be waste of CPU resources. Nick Jul 19, 2012 at 18:44 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; It is possible if the IP of a visitor to my web. Whether the visitor uses the DNS to Google? jcarlosweb Dec 29, 2015 at 21:26 yes, but you do not need to use dns2 for this. apache /php gives you $_SERVER[REMOTE_ADDR] for this. If unsure - do print_r($_SERVER) or ask question about it. Nick Dec 30, 2015 at 6:13 require_once 'Net/DNS2.php'; $resolver = new Net_DNS2_Resolver( array('nameservers' => array('8.8.8.8')) ); $resp = $resolver->query("hooktube.com.", 'A'); print_r($resp); echo $resp->answer[0]->address; Nick Jul 19, 2012 at 18:50

If you are allowed to run shell scripts from your script, you can use the system's nslookup command.

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

Note: use escapeshellarg if $host and $dns are from user input.

I am getting these responses. Note that for yahoo it says: 'Addresses' C:\Users\User>nslookup slavi-2016-05-04.com 8.8.8.8 Server: google-public-dns-a.google.com Address: 8.8.8.8 *** google-public-dns-a.google.com can't find slavi-2016-05-04.com: Non-existent domain C:\Users\User>nslookup yahoo.com 8.8.8.8 Server: google-public-dns-a.google.com Address: 8.8.8.8 Non-authoritative answer: Name: yahoo.com Addresses: 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 – Svetoslav Marinov May 4, 2016 at 14:17

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.