17

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

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/… Commented 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')? Commented Jul 19, 2012 at 18:07
  • @Rocket, just suggesting what I was familiar with, hence the comment rather than answer ;) Commented 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. Commented Jul 19, 2012 at 18:44

3 Answers 3

12
<?
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;
Sign up to request clarification or add additional context in comments.

3 Comments

It is possible if the IP of a visitor to my web. Whether the visitor uses the DNS to Google?
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.
Excuse me. To know if the visitor of my web using google public dns?
8

Try net_dns2 (it's also in PEAR).

3 Comments

looks promising, will give you feedback soon
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;
8

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.

4 Comments

@jcarlosweb: I'm sorry, but I can't understand what you are asking.
Excuse me. To know if the visitor of my web using google public dns?
There is no way to detect this. Why you need such information anyway?
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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.