Die Klasse DNSClient (gb.net) implementiert einen einfachen DNS-Client (Resolver) für die Ermittlung des Host-Namens zu einer vorgegebenen IP-Adresse (reverse lookup) und für die Ermittlung der IP-Adresse zu einem vorgegebenen Host-Namen (forward lookup). Man sagt, dass Host-Namen in IP-Adressen und umgekehrt aufgelöst werden. Die Anfragen richtet der DNS-Client an einen DNS-Server, der entweder in den TCP/IP-Einstellungen für Ihr System eingetragen ist oder über DHCP angefordert werden kann.
Der DNS-Client kann im asynchronen oder im synchronen Modus arbeiten. Den Modus können Sie über die Eigenschaft 'Async' einstellen. Im synchronen Modus wird das Programm nicht auf Ereignisse während des Auflösens von Host-Namen und IP-Adressen reagieren. Der Standard ist der synchrone Modus.
Einen interessanten Überblick zum Thema DNS (Domain Name System) vermittelt Ihnen die Webseite http://de.wikipedia.org/wiki/Domain_Name_System.
Die Klasse DNSClient verfügt über diese Eigenschaften:
Eigenschaft | Datentyp | Default | Beschreibung |
---|---|---|---|
Async | Boolean | False | Ermittelt oder setzt den asynchronen Modus des DNS-Client. Wenn diese Eigenschaft auf TRUE gesetzt ist, wird der DNS-Client im asynchronen Modus zu arbeiten, so dass das Programm nicht während des Auflösungsprozesses angehalten wird. Die Status-Eigenschaft hat dann den Wert Net.Active und das Ereignis 'Finished' wird ausgelöst, nachdem der Auflösungsprozess beendet wurde. |
HostIP | String | - | Diese Eigenschaft kann auf zwei Arten eingesetzt werden: Lesen Sie die IP-Adresse aus, nach dem der Host-Name aufgelöst wurde oder geben Sie die IP-Adresse an, von der Sie den Host-Namen ermitteln möchten. |
HostName | String | - | Diese Eigenschaft kann auf zwei Arten eingesetzt werden: Lesen Sie den Host-Namen aus, nach dem die IP-Adresse aufgelöst wurde oder geben Sie den Hostnamen an, von dem Sie die IP-Adresse ermitteln möchten. |
Status | Integer | 0 | Diese Eigenschaft spiegelt den aktuellen Status des DNS-Clients wider: Net.Active – es wird versucht, Host-Namen in die IP-Adresse aufzulösen oder umgekehrt und Net.Inactive (DNS-Client ist inaktiv). |
Tabelle 24.2.2.1.1 : Eigenschaften der Klasse DNSClient
Die Klasse DNSClient verfügt über diese drei Methoden:
Methode | Beschreibung |
---|---|
GetHostIP() | Es wird versucht, die IP-Adresse zum angegebenen Host-Namen – gespeichert in der Eigenschaft 'HostName' – zu ermitteln (aufzulösen). Das Ergebnis der Auflösung ist in der Eigenschaft 'HostIP' gespeichert. Die Eigenschaft 'HostIP' hat den Wert NULL, wenn die Auflösung fehlschlug. |
GetHostName() | Es wird versucht, den Host-Namen zur angegebenen IP-Adresse – gespeichert in der Eigenschaft 'HostIP' – zu ermitteln (aufzulösen). Das Ergebnis der Auflösung ist in der Eigenschaft 'HostName' gespeichert. Wenn die Auflösung fehlschlug, dann hat Eigenschaft 'HostName' den Wert NULL. |
Stop() | Bricht nur eine asynchrone Anfrage ab. Wenn der DNS-Client im synchronen Modus arbeitet oder inaktiv ist, dann bewirkt die Methode 'Stop()' nichts. |
Tabelle 24.2.2.2.1 : Methoden der Klasse DNSClient
Die Klasse DNSClient verfügt nur über die Eigenschaft Finished. Dieses Ereignis wird ausgelöst, wenn eine (asynchrone) Auflösungsanfrage beendet wurde. Innerhalb der Ereignisbehandlungsroutine können Sie die in den Eigenschaften HostIP und HostName gespeicherten Werte auslesen und in Ihrem Programm weiter verarbeiten.
Der DNS-Client aus der Beispiel-Sammlung von Gambas wurde so angepasst, dass alle Eigenschaften, Methoden und das Ereignis 'Finished' eingesetzt werden. Sie finden das adaptierte Projekt als Projekt-Quellarchiv im Download-Bereich. Die nächsten Bilder sollen Ihnen einen Eindruck von der Arbeit mit dem DNS-Client vermitteln:
Abbildung 24.2.2.4.1: Programm-Oberfläche
Abbildung 24.2.2.4.2: Auflösung Host-Name → IP-Adresse
Abbildung 24.2.2.4.3: Auflösung IP-Adresse → Host-Name
Abbildung 24.2.2.4.4: Auflösung Host-Name → IP-Adresse
Abbildung 24.2.2.4.5: Die Auflösung von gambas-book.net gelang nicht
Abbildung 24.2.2.4.6: Die Auflösung der IP-Adresse 46.30.56.205 gelang nicht
Kommentare:
Für den Einsatz der Instruktionen EXEC und SHELL können Sie die vorgestellten Befehle mit Erfolg einsetzen, um den Host-Namen zu einer vorgegebenen IP-Adresse oder die IP-Adresse zu einem vorgegebenen Host-Namen zu ermitteln:
hans@linux:~$ nslookup gambas-buch.de Server: 127.0.0.1 Address: 127.0.0.1#53 Non-authoritative answer: Name: gambas-buch.de Address: 109.237.140.40 hans@linux:~$ nslookup 109.237.140.40 Server: 127.0.0.1 Address: 127.0.0.1#53 Non-authoritative answer: 40.140.237.109.in-addr.arpa name = alfa3035.alfahosting-server.de. hans@linux:~$ resolveip -s gambas-buch.de 109.237.140.40 hans@linux:~$ dig +short gambas-buch.de 109.237.140.40 hans@linux:~$ host gambas-buch.de gambas-buch.de has address 109.237.140.40 hans@linux:~$ ping -a -c 1 gambas-buch.de PING gambas-buch.de (109.237.140.40) 56(84) bytes of data. 64 bytes from alfa3035.alfahosting-server.de (109.237.140.40): icmp_req=1 ttl=58 time=59.3 ms
Oft ist es von Interesse, welche IP-Adresse Ihnen vom Provider zugewiesen worden ist. In diesem Fall kommen Sie mit einer der vier Anweisungen zum Ziel:
hans@linux:~$ curl -s http://checkip.dyndns.org/ | grep -o "[[:digit:].]\+" hans@linux:~$ wget -qO - http://cfaj.freeshell.org/ipaddr.cgi hans@linux:~$ curl "http://www.networksecuritytoolkit.org/nst/cgi-bin/ip.cgi" $ wget -qO - www.meineip.de 2>&1 | grep 'title="Meine IP:' | sed -e 's/.*"ip">//' -e 's/<.p>.*//'