Autor Beitrag
FriFra
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 557

Win XP Prof, Win XP Home,Win Server 2003,Win 98SE,Win 2000,Win NT4,Win 3.11,Suse Linux 7.3 Prof,Suse Linux 8.0 Prof
D2k5 Prof, D7 Prof, D5 Standard, D3 Prof, K3 Prof
BeitragVerfasst: Sa 17.05.03 11:39 
Das Thema gab es zwar schon 1000 Mal, aber das Beispiel:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
  function IPAddrToName(IPAddr: string): string;
  var
    SockAddrIn: TSockAddrIn;
    HostEnt: PHostEnt;
    WSAData: TWSAData;
  begin
    WSAStartup($101, WSAData);
    SockAddrIn.sin_addr.s_addr := inet_addr(PChar(IPAddr));
    HostEnt := gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET);
    if HostEnt <> nil then
      Result := StrPas(Hostent^.h_name)
    else
      Result := '';
  end;


ist extreem langsam :evil:

Gibt es nicht eine performantere Lösung, z.B. ein Table mit allen bekannten Hosts, inkl. IP's aus welchem man dann den entspr. Eintrag zurückgibt?
Die o.g. Funktion benötigt jedenfalls z.T. mehrere Sekunden, vor allem dann, wenn kein Hostname verfügbar ist! Ausserdem kann diese Funktion keine Namn von Printservern auflösen, was Windows selbst aber hinbekommt (Netzwerkumgebung!)...
cirrus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 49



BeitragVerfasst: Mo 26.05.03 01:14 
eine performantere Lösung wirst du wohl nicht finden, der code greift direkt auf die winsock schnittstelle zu.

_________________
Wenn die Nacht am tiefsten ist der Tag am nächsten
FriFra Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 557

Win XP Prof, Win XP Home,Win Server 2003,Win 98SE,Win 2000,Win NT4,Win 3.11,Suse Linux 7.3 Prof,Suse Linux 8.0 Prof
D2k5 Prof, D7 Prof, D5 Standard, D3 Prof, K3 Prof
BeitragVerfasst: Mo 26.05.03 01:31 
Ich habe die Sache jetzt anders gelöst... Ich Rufe "net view" captured auf und filtere aus dem resultierenden Text alle Rechnernamen, diese Pinge ich dann kurz an um die IP aufzulösen. Allein das Ausführen von "net view" und der anschliessende Ping sind schon wesentlich schneller als die o.g. Funktion. Auserdem versuche ich nun nicht Rechnernamen zu bekommen wo keine sind, denn dabei hängt die Funktion etwas...

Da aber "net" sofort alle Rechnernamen auflisten kann, muss es eigentlich noch eine elegantere Lösung geben.

Ausserdem liefert die Funktion auch alle "Rechnernamen" über die hosts-Datei, welche u.U. nicht mit den tatsächlichen Namen im Intranet übereinstimmen, schon deshalb ist "net" besser...