2012-07-19 7 views
11

Come posso risolvere l'hostname in indirizzo IP utilizzando PHP, ma utilizzando un server dei nomi diverso (ad esempio OpenDNS o Google Public DNS).Risolvere il nome host in PHP utilizzando un altro nome server

Non sembra che dns_get_record() o gethostbyname() sono in grado di utilizzare un nameserver diverso da quello attualmente impostato sul sistema (in impostazioni TCP/IP o in /etc/resolv.conf).

L'unico modo che ho trovato è utilizzando la classe PEAR netto/DNS, ma mi dà un sacco di avvertimenti sotto PHP 5.4

+0

È un'opzione per eseguire uno script Python tramite exec e basta leggere l'output della shell? Ho visto questo stesso problema risolto in urllib2 su SO qui: http: //stackoverflow.com/questions/2236498/tell-urllib2-to-use-custom-dns/2237040#2237040 – DeaconDesperado

+0

@DeaconDesperado: Perché usare uno script python ? Se puoi 'exec' in PHP, perché non chiamare semplicemente il comando unix' host'? 'exec ('host google.com 8.8.8.8')'? –

+0

@Rocket, solo suggerendo ciò che mi era familiare, quindi il commento piuttosto che la risposta;) – DeaconDesperado

risposta

7

Prova net_dns2 (è anche in PEAR).

+0

sembra promettente, ti forniremo presto un feedback – Nick

+0

require_once 'Net/DNS2.php'; $ resolver = new Net_DNS2_Resolver (array ('nameservers' => array ('8.8.8.8'))); $ risp = $ resolver-> query ("hooktube.com", 'A'); print_r ($ risp); echo $ resp-> answer [0] -> indirizzo; – Nick

6

Se è possibile eseguire script di shell dal proprio script, è possibile utilizzare il comando nslookup del sistema.

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

Nota: utilizzare escapeshellarg se $host e $dns sono dall'input dell'utente.

+0

@jcarlosweb: Mi dispiace, ma non riesco a capire cosa stai chiedendo. –

+0

Scusami. Per sapere se il visitatore del mio sito web utilizza google public dns? – jcarlosweb

+2

Non c'è modo di rilevare questo. Perché hai bisogno di tali informazioni comunque? – Nick

9
<? 
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; 
+0

È possibile se l'IP di un visitatore del mio sito web. Se il visitatore utilizza il DNS per Google? – jcarlosweb

+1

sì, ma per questo non è necessario utilizzare dns2. apache/php ti dà $ _SERVER [REMOTE_ADDR] per questo.In caso di dubbi, fare print_r ($ _ SERVER) o fare domande al riguardo. – Nick

+0

Scusami. Per sapere se il visitatore del mio sito web utilizza google public dns? – jcarlosweb

Problemi correlati