unForastero

<Webworking>


Whois basteln: Domain noch frei oder belegt?

Samstag, 17 Juli 2010     1 Kommentar  





Um bei einer Registrierungsstelle wie der DENIC abzufragen, ob eine Domain frei oder vergeben ist, muss technisch gesehen, eine Anfrage an den Server gestellt und das Ergebnis ausgewertet werden. Beginnen wir mit einem Formular zur Übergabe der Domain an das PHP-Script.


<form method="get">
<input type="text" name="domain" value="<?php echo $domain; ?<"<
<input type="submit">
</form>


Das PHP-Script liest die Variable mit strip_tags() ein, damit keine Codeteile in die Anfrage geschmuggelt werden können. Hinter die Domain in der Variablen $domain setzen wir ein Leerzeichen (Backslash n). Warum? Es geht auch ohne, die Antwort der Abfrage dauert aber um ein vielfaches länger. Im Array $server stecken die Adresse zur Anfrage und die möglichen Antworten. Wir senden die Anfrage mit fsockopen(), das @-Zeichen vor der Funktion verhindert die Ausgabe möglicher PHP-Fehlermeldungen. Die Antwort der Abfrage wird in die Variable $data geschrieben. Mit der Funktion strtolower() wird der ganze Inhalt von $data in Kleinbuchstaben umgewandelt, das vereinfacht den späteren Vergleich. Und genau diesen Vergleich übernimmt die Funktion ereg(). Steckt das 2. Array-Element der Variablen $server (nämlich status: free) in unserem Ergebnis ($data) schreiben wir in unsere Ergebnisvariable $res frei. Entsprechendes natürlich bei den anderen Antwortmöglichkeiten.


<?php
if(isset($_GET['domain']) && $_GET['domain']!=""){
$data = '';
$domain = strip_tags($_GET['domain']);
$domain = $domain."\n";

$server = array("whois.denic.de", "status: free", "status: connect", "status: invalid", "connection refused");

$fp = @fsockopen($server[0], 43, $errno, $errstr, 60);
@socket_set_blocking($fp, false);
@fputs($fp, $domain);
while(!feof($fp)){$data .= @fgets($fp, 4096);}
@fclose($fp);

$data=strtolower($data);

if(strpos($data, $server[1])!==false){$res='frei';}
elseif(strpos($data, $server[2])!==false){$res='vergeben';}
elseif(strpos($data, $server[3])!==false){$res='ungueltig';}
elseif(strpos($data, $server[4])!==false){$res='verweigert';}
elseif($domain!= "" && $res==""){$res='vergeben';}

echo $res;
?>

Die Antworten, Schreibweisen sogar Serveradressen der Registrierungsstelle ändern sich leider immer mal wieder. Von Zeit zu Zeit sollte man manuell überprüfen, ob das Abfragescript richtig funktioniert. Beispiele für andere tld sind in folgender Tabelle zu finden. Bei manchen Serverantworten muss auf Groß- und Kleinschreibweise geachtet werden, also ggf. auf die Funktion strtolower() verzichten. Bei anderen Antworten sind die Leerzeichen in $data komplett entfernt.


tld  Serveradresse  Antwort, wenn frei
.euwhois.euAVAILABLE
.comwhois.verisign-grs.comnomatch
.chwhois.nic.chwedonothaveanentryinourdatabasematchingyourquery
.atwhois.nic.atnothingfound
.orgwhois.networksolutions.comnomatchfor
.infowhois.afilias.netnotfound


diese Seite teilen:




Kommentare

es gibt insgesamt 1 Kommentar(e)












neu laden








2009 - 2017 Copyright © unforastero.de       rechtliche Hinweise |  Impressum |  Datenschutz