Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Rechner-Name aus IP: Wieso ist die Function so langsam? (https://www.delphipraxis.net/58134-rechner-name-aus-ip-wieso-ist-die-function-so-langsam.html)

Helmi 1. Dez 2005 19:37


Rechner-Name aus IP: Wieso ist die Function so langsam?
 
Hallo,

ich habe bei den Schweizern folgenden Code gefunden:

Delphi-Quellcode:
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;
Er dient dazu, aus einer Ip-Adresse den Rechnernamen rauszufinden.

Dies funktioniert auch. Nur bei der Zeile:
Delphi-Quellcode:
  HostEnt := gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET);
wartet das Programm gute 10 - 15 sek und tut nichts.

Dazu meine Fragen:
  • Wieso stoppt dort das Programm?
  • Gibts vielleicht noch nen anderen Code um den Rechnernamen über IP-Adresse rausfinden zu können?

Luckie 1. Dez 2005 19:43

Re: Rechner-Name aus IP: Wieso ist die Function so langsam?
 
Delphi-Quellcode:
uses
  WinSock;

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;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(IPAddrToName('127.0.0.1'));
end;
Da es mit der lokalen IP Adresse ganz fix geht, liegt es wohl am Netzwerk.

Helmi 1. Dez 2005 19:47

Re: Rechner-Name aus IP: Wieso ist die Function so langsam?
 
Zitat:

Zitat von Luckie
Da es mit der lokalen IP Adresse ganz fix geht, liegt es wohl am Netzwerk.

Scheint so leider!

Ich habs selber gerade mit der localen IP-Adresse getestet und da war es sehr flott - liegt wohl wirklich an den Sockets.

phXql 1. Dez 2005 19:51

Re: Rechner-Name aus IP: Wieso ist die Function so langsam?
 
Zitat:

Zitat von Helmi
Zitat:

Zitat von Luckie
Da es mit der lokalen IP Adresse ganz fix geht, liegt es wohl am Netzwerk.

Scheint so leider!

Ich habs selber gerade mit der localen IP-Adresse getestet und da war es sehr flott - liegt wohl wirklich an den Sockets.

windows muss dazu ja erstmal eine namensauflösung machen. und das dauert übers netzwerk halt länger...

supermuckl 1. Dez 2005 20:45

Re: Rechner-Name aus IP: Wieso ist die Function so langsam?
 
ne keine namensauflösung sondern eine RDNS anfrage
das heist, es gibt einen reverse dns eintrag in den DNS servern, die zu einer IP den namen wissen.
somit eine "ip auflösung" ;)

und da windows bei sich selbst den namen direkt kennt, geht das auch ohne umweg so schnell.
bei den internet IPs, muss da erstmal der ganze weg bis zum jeweiligen dienst gefunden und dann auch der rdns zurück kommen.. das braucht seine mehr oder weniger große zeit.

man beachte auch diesen wiki eintrag:

http://de.wikipedia.org/wiki/Reverse_Dom%C3%A4ne

phXql 1. Dez 2005 20:57

Re: Rechner-Name aus IP: Wieso ist die Function so langsam?
 
Zitat:

Zitat von supermuckl
ne keine namensauflösung sondern eine RDNS anfrage
das heist, es gibt einen reverse dns eintrag in den DNS servern, die zu einer IP den namen wissen.
somit eine "ip auflösung" ;)

und da windows bei sich selbst den namen direkt kennt, geht das auch ohne umweg so schnell.
bei den internet IPs, muss da erstmal der ganze weg bis zum jeweiligen dienst gefunden und dann auch der rdns zurück kommen.. das braucht seine mehr oder weniger große zeit.

man beachte auch diesen wiki eintrag:

http://de.wikipedia.org/wiki/Reverse_Dom%C3%A4ne

okay, ich hätte "namens"-auflösung in "" setzen sollen. In wirklichkeit wird ja die IP in einen Namen aufgelöst und nich andersrum.

reverse DNS geht aber nich im loacl-netzwerk. da wird für die "namens"-auflösung unter windows soweit ich weiss WINS hergenommen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz