Bei jeder Anfrage an einen Web-Server wird mit dem Request die anfragende
IP-Adresse mitgeschickt. Über Request.ServerVariables("REMOTE_ADDR")
kann man diese ermitteln. Was man jedoch nicht bekommt ist den
DNS-Host-Namen, d.h. die Übersetzung der IP-Adresse in den Server-Namen. Um
diesen herauszubekommen muss man in ASP eine externe Komponente bemühen, die
in den meisten Fällen Geld kostet und nur von wenigen Providern angeboten
wird, oder man nutzt das DNS-Objekt der
System.Net-Klasse, sofern der eigene Web-Server schon auf Windows
2003 läuft und über ASP.NET verfügt.
Zunächst wird das HTML-Grundgerüst der neuen ASPX-Seite im Visual Studio
.NET HTML-Designer angelegt:
<html>
<head>
<title>DNS-Host-Namen ermitteln</title>
</head>
<body>
<form runat="server" id="frmResolveIP">
IP-Adresse:
<asp:textbox runat="server" id="txtIP" width="110px"/>
<asp:button runat="server" onclick="LookUpHost"
text="Ermitteln" id="cmdGo" />
<span> > </span>
<asp:label runat="server" id="lblHostName" />
</form>
</body>
</html>
Wir brauchen nicht mehr als eine Textbox (txtIP), eine
Schaltfläche zum Ausführen der Funktion (cmdGo) und ein Label (lblHostName)
in das das Ergbnis geschrieben wird. Alle Elemente werden von einem
HTML-Formular umschlossen (frmResolveIP).
Die Direktiven, am Anfang des HTML-Codes werden wie folgt angepasst:
<%@ Page Language="vb" %>
<%@ Import Namespace="System.Net" %>
Mit der ersten Zeile wird die Sprache auf VB festgelegt und mit der
zweiten wird die benötigte .NET-Klasse System.Net importiert, um leichter
Zugriff auf das gewünschte Objekt zu erlangen.
Die eigentliche Arbeit, die im OnClick-Ereignis der
Schaltfläche aufgerufen wird, erledigt eine Prozedur namens LookUpHost, die im HEAD des HTML-Codes
abgelegt wird:
<script runat="server">
Sub LookUpHost(sender As Object, e As System.EventArgs)
Try
Dim HostInfo As IPHostEntry = Dns.GetHostByAddress(txtIP.Text)
lblHostName.Text = HostInfo.HostName
Catch ex As Exception
lblHostName.Text = "unbekannter Host"
End Try
End Sub
</script>
Um etwaige Fehler abzufangen ist die Prozedur mit einem Try-Catch-Block
ausgerüstet. Tritt bei der Ermittlung des Host-Namens ein Fehler auf, z.B.
weil das Ziel nicht erreichbar ist, so wird die Zeichenfolge "unbekannter
Host" zurückgegeben.
Als Abschluss werden die HTML-Elemente durch ein wenig CSS-Code im HEAD
formatiert:
<style><!--
body, input { font-family: Tahoma; font-size: 8pt }
--></style>