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;