Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi IP Adresse aus dem Hostnamen ermitteln (https://www.delphipraxis.net/150867-ip-adresse-aus-dem-hostnamen-ermitteln.html)

CG2003 29. Apr 2010 07:20


IP Adresse aus dem Hostnamen ermitteln
 
Hallo,

momentan nutze ich folgende Funktion um den Hostnamen einer IP-Adresse zu ermitteln:

Delphi-Quellcode:
function IPAddrToName(IPAddr: AnsiString): AnsiString;
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
  begin
    Result:=StrPas(Hostent^.h_name)
  end
  else
  begin
    Result:='';
  end;
end;

gibt es auch die "umgekehrte" Möglichkeit, also anhand des Hostnamens die IP-Adresse zu erhalten?



Danke im Voraus!

hoika 29. Apr 2010 07:25

Re: IP Adresse aus dem Hostnamen ermitteln
 
Hallo,

gebs doch einfach in Google ein "Delphi GetIPFromHost"

1

;)


Heiko

Luckie 29. Apr 2010 07:27

Re: IP Adresse aus dem Hostnamen ermitteln
 
Wenn man nach Delphi-Referenz durchsuchenip hostname sucht, findet man zum Beispiel das:
Delphi-Quellcode:
function GetComputerName(IPAddr: string): string;
var
  SockAddrIn: TSockAddrIn;
  HostEnt: PHostEnt;
  WSAData: TWSAData;
begin
  WSAStartup($101, WSAData);
  SockAddrIn.sin_addr.s_addr := inet_addr(IPAddr);
  HostEnt := gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET);
  if HostEnt <> nil then
    Result := StrPas(Hostent^.h_name)
  else
    Result := '';
end;
Mist, er wollte es ja anders herum.

himitsu 29. Apr 2010 07:42

Re: IP Adresse aus dem Hostnamen ermitteln
 
Um das oben schon verlinkte Beispiel mal zu erklären:

GetHostByAddr - Quelle=IP
GetHostByName - Quelle=URL/Domain

Man kennt nun also schon GetHostByAddr und schaut einfach mal nach, was es dazu für Informationen gibt.
In diesem Fall geht man also zum MSDN MSDN-Library durchsuchenGetHostByAddr und dort findet man auch die "Umkehrfunktion" im Text genannt.

CG2003 29. Apr 2010 07:50

Re: IP Adresse aus dem Hostnamen ermitteln
 
Hallo Luckie,

erstmal danke, aber so habe ich das bei mir eingebaut:

Delphi-Quellcode:
function NameToIPAddr(IPAddr: PAnsiChar): AnsiString;
var
  SockAddrIn: TSockAddrIn;
  HostEnt: PHostEnt;
  WSAData: TWSAData;
begin
  WSAStartup($101, WSAData);
  SockAddrIn.sin_addr.s_addr := inet_addr(IPAddr);
  HostEnt := GetHostByName(@SockAddrIn.sin_addr.S_addr);
  if HostEnt <> nil then
    Result := StrPas(Hostent^.h_name)
  else
    Result := '';
end;
bekomme aber immer nur einen leeren Wert zurück! Irgend eine Idee?

Mithrandir 29. Apr 2010 08:12

Re: IP Adresse aus dem Hostnamen ermitteln
 
Zitat:

Zitat von CG2003
Irgend eine Idee?

Rückgabewerte mal prüfen?

Du solltest IPAddr vielleicht vorher nicht durch MSDN-Library durchsucheninet_addr jagen. ;) Außerdem brauchst du in diesem Falle die TSockAddrIn-Struktur nicht.

Allerdings sagt Microsoft auch, dass man die GetAddrInfo-Function für sowas nutzen soll, da GetHostByName veraltet ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:19 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