2012-07-19 12 views
11

Cómo puedo resolver el nombre de host a la dirección IP usando PHP, pero usando un servidor de nombres diferente (por ejemplo, OpenDNS o Google Public DNS).Resolver nombre de host en PHP utilizando un servidor de nombres diferente

No parece que dns_get_record() o gethostbyname() son capaces de utilizar un servidor de nombres diferentes de un configurados actualmente en el sistema (en la configuración de TCP/IP o en /etc/resolv.conf).

La única forma que he encontrado es el uso de la clase PEAR Net/DNS, pero me da un montón de advertencias bajo PHP 5.4

+0

¿Es una opción ejecutar un script de python a través de exec y simplemente leer el resultado del shell? He visto este mismo problema resuelto en urllib2 en SO aquí: http: //stackoverflow.com/questions/2236498/tell-urllib2-to-use-custom-dns/2237040#2237040 – DeaconDesperado

+0

@DeaconDesperado: ¿Por qué usar un script de python? ? Si puede ejecutar 'exec' en PHP, ¿por qué no simplemente llamar al comando' host 'de unix? 'exec ('host google.com 8.8.8.8')'? –

+0

@Rocket, simplemente sugiriendo con qué estaba familiarizado, de ahí el comentario en lugar de responder;) – DeaconDesperado

Respuesta

7

Trate net_dns2 (que es también en PEAR).

+0

parece prometedor, le dará retroalimentación pronto – Nick

+0

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-> respuesta [0] -> dirección; – Nick

6

Si tiene permiso para ejecutar scripts de shell desde su secuencia de comandos, puede usar el 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: utilizar escapeshellarg si $host y $dns son de entrada del usuario.

+0

@jcarlosweb: Lo siento, pero no puedo entender lo que estás preguntando. –

+0

Disculpe. ¿Para saber si el visitante de mi web usa google public dns? – jcarlosweb

+2

No hay forma de detectar esto. ¿Por qué necesita esa información de todos modos? – 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

Es posible si el IP de un visitante de mi web. Si el visitante usa el DNS para Google? – jcarlosweb

+1

sí, pero no necesita usar dns2 para esto. apache/php le otorga $ _SERVER [REMOTE_ADDR] para esto.Si no está seguro, imprima_r ($ _ SERVER) o haga preguntas al respecto. – Nick

+0

Disculpe. ¿Para saber si el visitante de mi web usa google public dns? – jcarlosweb

Cuestiones relacionadas