2012-07-19 12 views
11

Jak mogę zmienić nazwę hosta na adres IP za pomocą PHP, , ale używając innego serwera nazw (np. OpenDNS lub Google Public DNS).Zdefiniuj nazwę hosta w PHP przy użyciu innego serwera nazw

Nie wydaje się, aby dns_get_record() lub gethostbyname() były w stanie użyć innego serwera nazw niż ten aktualnie skonfigurowany w systemie (w ustawieniach TCP/IP lub w /etc/resolv.conf).

Jedynym sposobem znalazłem się przy użyciu klasy PEAR netto/DNS, ale daje mi wiele ostrzeżeń pod PHP 5.4

+0

Czy jest to opcja uruchomienia skryptu Pythona przez exec i po prostu przeczytać wyjście powłoki? Widziałem ten sam problem rozwiązany w urllib2 na SO tutaj: http: //stackoverflow.com/questions/2236498/tell-urllib2-to-use-custom-dns/2237040#2237040 – DeaconDesperado

+0

@DeaconDesperado: Dlaczego warto używać skryptu Pythona ? Jeśli możesz 'exec' w PHP, dlaczego nie wystarczy wywołać komendy unix' host'? 'exec ('host google.com 8.8.8.8')'? –

+0

@Rocket, sugerując tylko to, co znałem, stąd raczej komentarz niż odpowiedź;) – DeaconDesperado

Odpowiedz

7

Spróbuj net_dns2 (jest to również w PEAR).

+0

wygląda obiecująco, wkrótce otrzymasz informację zwrotną – 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-> answer [0] -> address; – Nick

6

Jeśli możesz uruchamiać skrypty powłoki ze swojego skryptu, możesz użyć polecenia systemu 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); 

Uwaga: Należy używać escapeshellarg jeśli $host i $dns są od danych wejściowych użytkownika.

+0

@jcarlosweb: Przykro mi, ale nie rozumiem, o co prosisz. –

+0

Przepraszam. Aby dowiedzieć się, czy odwiedzający moją witrynę używa Google Public Dns? – jcarlosweb

+2

Nie można tego wykryć. Dlaczego i tak potrzebujesz takich informacji? – 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

Jest to możliwe, jeśli IP odwiedzającego do mojej strony. Czy użytkownik używa DNS do Google? – jcarlosweb

+1

tak, ale nie musisz do tego celu używać dns2. apache/php daje $ _SERVER [REMOTE_ADDR] do tego.Jeśli nie jesteś pewien - wykonaj print_r ($ _ SERVER) lub zadaj pytanie na ten temat. – Nick

+0

Przepraszam. Aby dowiedzieć się, czy odwiedzający moją witrynę używa Google Public Dns? – jcarlosweb

Powiązane problemy