Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Lokale IP auslesen (https://www.delphipraxis.net/117355-lokale-ip-auslesen.html)

avadex 16. Jul 2008 14:33


Lokale IP auslesen
 
Hi,

wie kann ich meine lokale IP auslesen? Das ganze sollte so einfach wie möglich sein. Ich möchte die IP auslesen, und dann weiter verarbeiten um sie dann mit einer fest vorgegebenen zu vergleichen.

bigben37 16. Jul 2008 14:43

Re: Lokale IP auslesen
 
IP-Adresse

Larsi 16. Jul 2008 14:44

Re: Lokale IP auslesen
 
Lokale IP-Adressen ermitteln


Folgende Funktion gibt die lokalen IP-Adressen zurück. Sie erwartet als Parameter eine abgeleitete Klasse von TStrings, wie beispielsweise TMemo.Lines oder TListbox.Items oder auch eine TStringList.

Sie gibt True zurück, wenn mindestens eine IP-Adresse ermittelt werden konnte. Sollte der Computer hinter einem Router liegen, wird die echte Internet-Adresse nicht berücksichtigt.

Die Unit WinSock muss eingebunden werden.

Delphi-Quellcode:
function GetLocalIPs(const Lines:TStrings):Boolean;
type
  PPInAddr= ^PInAddr;
var
  wsaData: TWSAData;
  HostInfo: PHostEnt;
  HostName: Array[0..255] of Char;
  Addr: PPInAddr;
begin
  Result:=False;
  Lines.Clear;
  if WSAStartup($0102, wsaData)=0 then
  try
    if gethostname(HostName, SizeOf(HostName)) = 0 then Begin
       HostInfo:= gethostbyname(HostName);
       if HostInfo<>nil then Begin
          Addr:=Pointer(HostInfo^.h_addr_list);
          if (Addr<>nil) AND (Addr^<>nil) then
             Repeat
                    Lines.Add(StrPas(inet_ntoa(Addr^^)));
                    inc(Addr);
             Until Addr^=nil;
       end;
    end;
    Result:=True;
  finally
    WSACleanup;
  end;
end;
Aufgerufen werden kann die Funktion z.B. so:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if not GetLocalIPs(Memo1.Lines) then
     MessageDLG('Keine IP-Adresse',mtInformation,[mbOK],0);
end;

avadex 16. Jul 2008 14:51

Re: Lokale IP auslesen
 
Super, ich danke euch !!!

Werde es wenn icih zuhause bin direkt testen.

Ajin 28. Jul 2009 08:20

Re: Lokale IP auslesen
 
Wenn ich den o.g. Quellcode kompiliere, tritt an diesen Zeilen:

Delphi-Quellcode:
if gethostname(HostName, SizeOf(HostName)) = 0 then Begin
HostInfo:= gethostbyname(HostName);
Folgender Fehler auf:

[DCC Fehler] Umain.pas(218): E2010 Inkompatible Typen: 'Array' und 'PAnsiChar'
[DCC Fehler] Umain.pas(219): E2010 Inkompatible Typen: 'Array' und 'PAnsiChar'


und bei:

Delphi-Quellcode:
Lines.Add(StrPas(inet_ntoa(Addr^^)));

[DCC Warnung] Umain.pas(224): W1057 Implizite String-Umwandlung von 'AnsiString' zu 'string'

:wiejetzt:

Matze 28. Jul 2009 08:23

Re: Lokale IP auslesen
 
Larsi, dass die Funktion nicht von dir stammt, dürfte hier allen klar sein. Daher gib bitte zukünftig immer deine Copy&Paste-Quellen an!
In deinem Fall delphi-treff.de.

Edit: Huch der Beitrag von Larsi ist auch schon 1 Jahr alt. Naja, das gilt dennoch.
Edit 2: @Ajin: Bei mir (TurboDelphi) kompiliert der oben genannte Code von delphi-treff.de (s. meinen Link) ohne Warnungen.

DeddyH 28. Jul 2009 08:43

Re: Lokale IP auslesen
 
Ich kenne die Implementierung von D2009 nicht, aber hilft es, wenn Du die Variablendeklaration änderst?
Delphi-Quellcode:
HostName: Array[0..255] of AnsiChar;

Ajin 28. Jul 2009 11:38

Re: Lokale IP auslesen
 
Delphi-Quellcode:
HostName: Array[0..255] of AnsiChar;
Das Ändern der Variablendeklaration half :hello:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:49 Uhr.

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