Entwickler-Ecke

Internet / Netzwerk - Hostname aus IP ermitteln


W4yne - Di 05.01.10 17:54
Titel: Hostname aus IP ermitteln
Wie kann man mit Delphi aus der IP den Hostnamen ermitteln?

mfg W4yne


Muck - Di 05.01.10 18:55

Hallo,

ich mache das so:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
uses WinSock;

function IPAddrToName(IPAddr: Ansistring): string;
var SockAddrIn: TSockAddrIn;HostEnt: PHostEnt;WSAData: TWSAData;
begin
WSAStartup($101, WSAData);
SockAddrIn.sin_addr.s_addr := inet_addr(PAnsiChar(IPAddr));
HostEnt := gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET);
if HostEnt <> nil then Result := StrPas(Hostent^.h_name) else Result := '';
end;


Ciao

Markus


Narses - Di 05.01.10 22:19

Moin!

user profile iconW4yne hat folgendes geschrieben Zum zitierten Posting springen:
Wie kann man mit Delphi aus der IP den Hostnamen ermitteln?
Geht es um eine bereits bestehende Verbindung oder kriegst du die IP-Adresse als DDN? Normalerweise kann man bei einer bereits bestehenden Verbindung den Hostnamen aus dem Binding bzw. dem Socket-Objekt lesen. :idea:

cu
Narses


W4yne - Mi 06.01.10 21:08

Was muck geschickt hat passt einwandfrei und nein es ist keine bestehende Verbindung.

mfg W4yne


Narses - Do 07.01.10 01:24

Moin!

user profile iconW4yne hat folgendes geschrieben Zum zitierten Posting springen:
Was muck geschickt hat passt einwandfrei
Naja, bis auf das WSA-Init, sowas gehört nicht in die Funktion rein (kostet nur Ressourcen). Und ein Init (gehört ausgewertet und) möchte auch gerne hinterher wieder aufgeräumt werden. :? Also ganz minimal irgendwie sowas:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
uses
  WinSock;

implementation

var
  WSAData: TWSAData;

function IPv4ToName(const IPv4ddn: AnsiString): String;
  var
    IPv4: in_addr;
    HostEnt: PHostEnt;
begin
  IPv4.S_addr := inet_addr(PAnsiChar(IPv4ddn));
  HostEnt := gethostbyaddr(@IPv4, SizeOf(IPv4), AF_INET);
  if Assigned(HostEnt) then
    Result := StrPas(Hostent^.h_name)
  else
    Result := '';
end;

initialization
  WSAStartup($101, WSAData); // der RC ist hoffentlich <> 0

finalization
  WSACleanup;
bitte nicht mit "funktioniert doch" kommen, ein Auto ohne Bremsen funktioniert auch...
cu
Narses


ardani - Mi 10.02.10 11:58

wie kann ich bei dem Beispiel verhindern, das der Rechner während des Ausführens "hängen" bleibt, mit Application.ProcessMessages;
Ich möchte erreichen, dass mein Programm den Teil ausführt, dabei aber wartet bis dieser abgeschlossen ist, da ich eine "Uhr" und einen Fortschrittsbalken anzeigen lasse, würde ich die Hostabfrage gerne "auslagern", damit die beiden Darstellungen, weiterhin Flüssig und Korrekt stattfinden.


elundril - Mi 10.02.10 12:57

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Moin!
bitte nicht mit "funktioniert doch" kommen, ein Auto ohne Bremsen funktioniert auch...


wie man bei Toyota sehr gut sehen kann. :mrgreen:

sry for OT, musste einfach sein^^


Delete - Mi 10.02.10 16:22

Dann lager die Routine in einen Thread aus.


BenBE - Mi 10.02.10 22:30

user profile iconelundril hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Moin!
bitte nicht mit "funktioniert doch" kommen, ein Auto ohne Bremsen funktioniert auch...


wie man bei Toyota sehr gut sehen kann. :mrgreen:

sry for OT, musste einfach sein^^

Warum musste ich da jetzt an X3 [http://www3.ndr.de/sendungen/extra_3/media/extra1726.html] denken? :mrgreen: