[PHP] Jak sprawdzić czy domena istnieje i do kogo należy?
Chcesz stworzyć sprawdzarkę domen, która sprawdzi czy domena istnieje, a jeżeli istnieje poda również informacje o jej właścicielu. Niesamowicie użyteczny skrypt dla firm zajmujących się rejestracją i sprzedażą domen internetowych, ponieważ od razu mogą one sprawdzić czy domena została zarejestrowana.
Skrypt sprawdza istnienie adresów WWW tylko w wybranych domenach (m.in. .pl, .com, .net, .biz, .info), ponieważ lista wszystkich domen byłaby bardzo długa. Nic nie stoi na przeszkodzie aby łatwo dodać kolejne kraje i domeny. Oto gotowy kod programu:
<?
$domena = "nask.pl";
$serwery["biz"]="whois.biz";
$serwery["cc"]="whois.enic.cc";
$serwery["com"]="whois.networksolutions.com";
$serwery["info"]="whois.afilias.net";
$serwery["fr"]="whois.nic.fr";
$serwery["pl"]="whois.dns.pl";
$serwery["int"]="whois.iana.org";
$serwery["net"]="whois.networksolutions.com";
$serwery["org"]="whois.networksolutions.com";
$serwery["cz"]="whois.nic.cz";
$kon = substr($domena,strrpos($domena, ".")+1);
$f=fsockopen($serwery[$kon],43,$errno,$errstr,20);
if ($f) {
fputs($f, "$domena\r\n");
while(!feof($f)) {$odp .= fgets($f,1024); }
fclose($f);
} else { $wynik="Nie można nawiązać połączenia...";}
// dla domen .pl
if (eregi("does not exists",$odp)) { $wynik="Domena nie istnieje...";}
// dla domen .biz .info .int
if (eregi("not found",$odp)) { $wynik="Domena nie istnieje...";}
// dla domen .cc .com .net .org
if (eregi("no match for",$odp)) { $wynik="Domena nie istnieje...";}
// dla domen .fr
if (eregi("no entries found",$odp)) { $wynik="Domena nie istnieje...";}
// dla domen .cz
if (eregi("no data found",$odp)) { $wynik="Domena nie istnieje...";}
if ($wynik=="") {
echo "Domena istnieje:<p>";
echo nl2br($odp);
} else { echo $wynik; }
?>
Wynik działania skryptu:
Domena istnieje:
% WHOIS Server NASK
% This server provides information only for PL domains
Domain name:
nask.pl
Holder of the domain:
NAUKOWA I AKADEMICKA SIEC KOMPUTEROWA
UL.WAWOZOWA 18 02-796 WARSZAWA
Registration date:
1995-04-26
Name servers:
eomer.nask.waw.pl 193.59.201.27
nms.cyf-kr.edu.pl 149.156.2.101 149.156.1.3
dns.tpsa.pl 194.204.159.1
zt.piotrkow.tpsa.pl 194.204.158.242
kirdan.warman.nask.pl 195.187.244.8
bilbo.nask.org.pl 195.187.245.51 148.81.16.51
% WHOIS database last updated 2002-10-29 09:00
Aby otrzymać informację o wybranych domenach wystarczy o nie "zapytać" odpowiednie serwery WHOIS. Ich adresy znajdziesz na stronach firm rejestrujących domeny w różnych krajach. W skrypcie umieściłem w tablicy $serwery tylko kilka przykładowych, ponieważ lista wszystkich byłaby bardzo długa (i w większości niepotrzebna, bo nie codzień sprawdzasz domeny w Afganistanie).
Po przypisaniu nazwy dowolnej domeny do zmiennej $domena zaczynamy ją wstępnie "obrabiać". Zmiennej $kon przypisujemy końcówkę (np. "pl"), czyli domenę najwyższego rzędu (TLD, ang. Top-Level-Domain). Następnie łączymy się z serwerem WHOIS dla odpowiedniej domeny. Znając końcówkę domeny łatwo można ustalić serwer, który w tablicy identyfikowany jest właśnie przez domenę najwyższego rzędu.
Zapytaniem dla serwera WHOIS jest nazwa domeny. Serwer zwraca albo lakoniczny komunikat, że domena nie istnieje albo podaje informacje o domenie, serwerach DNS, właścicielach lub inne informacje, zależnie od kraju i typu domeny.
Ponieważ komunikaty o nieistniejących domenach podawane są w dowolny sposób w zależności od serwera WHOIS, trzeba sprawdzić czy dany komunikat wystąpił w odpowiedzi. Jeżeli wystąpił, domena nie istnieje. Jeżeli nie wystąpił - domena istnieje, więc dodatkowo można pokazać odpowiedź z serwera WHOIS z większą ilością informacji o zarejestrowanej domenie.
Rozbudowa o kolejne domeny sprowadza się do znalezienia odpowiednich serwerów WHOIS i obsługi komunikatów o domenach nieistniejących. W ten sposób bardzo łatwo możesz zbudować własny serwis testujący wybrane domeny.
Pamiętaj jednak, że adresy serwerów WHOIS mogą ulec zmianie, w zależności od firmy obsługującej domeny. Niektóre serwery mają również limity zapytań - z jednego IP można zadać im np. 60 pytań na godzinę. Dlatego warto co jakiś czas sprawdzać czy nie nastąpiły zmiany dotyczące serwerów WHOIS.