.:: TechBlog ::. RSS Feed

19.02.2006.NET Framework 2.0 GetHostEntry() Bug?
Wie ihr sicher wisst arbeite ich ab - wenn es die Zeit zulässt - an dem Tool ArpScanner . Zurzeit mache ich diesbezüglich meine ersten Gehversuche mit Visual Express C# 2005. Bei der Portierung des Quellcodes mussten einige Klassen leicht angepasst werden, da verschiedene Methoden als veraltet markiert sind. Darunter fällt auch die rückwärtige Namenauflösung (IP -> Hostname).
Aus Dns.GetHostByAddress("<IP>").HostName wird dann Dns.GetHostEntry("<IP>").HostName. Problem ist, dass es die alte Funktionalität anscheinend nicht mehr voll unterstützt und teilweise die übergebene IP-Adresse wieder zurückgegeben wird...

Ich habe mir die beiden Methoden im System Namespace mal genauer mit Lutz Roeders .NET Reflector angeschaut. Dabei fiel mir auf, dass die neue Methode gegenüber der neuen IPv6 unterstützt und generell bei allen Betriebssystemen neuer als Windows 2000 genutzt wird. Für Interessierte sei folgender Einstieg zu empfehlen:

System.DNS -> GetHostEntry -> DNS.InternalGetHostbyAddress(ipaddress IP-Addresse, bool IncludeIPv6, bool throwOnFailure) -> TryGetNameInfo(string Name (-> getnameinfo(…)  GetAddrInfo von ws2_32.dll) usw.

Leider sind meine primären Stärken nicht in der Programmierung, weshalb ich eine Ideallösung lieber anderen überlasse. Für mich persönlich habe ich es wie folgt gelöst:

public static string GetHostnameByIP(string sIP)
{
   try
   {
      string sHostname = Dns.GetHostEntry(sIP).HostName;

      // .NET 2.0 scheint Probleme mit dem Auflösen zu haben und gibt die IP-Adresse zurück.
      // Falls dies der Fall ist, nutzte die veraltete Methode zur Hostname-Bestimmung
      if (sHostname == sIP)
         return Dns.GetHostByAddress(sIP).HostName;
      else
         return sHostname;
   }
   catch (Exception exc)
   {
       // Wirft eine Exception falls die IP nicht aufgelöst werden kann (.NET 1.1)
       SetError(exc.Message, exc);
       return "Unknown";
   }
}

Kommentare:

Keine Kommentare vorhanden!

Kommentar hinzufügen:

E-Mail Adresse:    Name:   

Kommentar*:

Um unerwünschten, automatisierten Einträgen vorzubeugen muss abschließend ein Code eingegeben werden. Diese finden sie direkt unter diesem Text auf der linken Seite.

Code eingeben*:     Security Code

* Pflichtfelder

Impressum