So etwas könnte gehen:
Delphi-Quellcode:
function GetLocalIPs(bGetAll: Boolean = True): string;
type
PPInAddr = ^PInAddr;
var
wsadata : TWSAData;
hostinfo : PHostEnt;
addr : PPInAddr;
begin
Result := '';
if(WSAStartUp($0101,wsadata) = 0) then // $0101 = Version 1.1 (Achtung: Ver 2.0 wäre $0002)
try
hostinfo := gethostbyname(nil);
if(hostinfo <> nil) then begin
addr := pointer(hostinfo^.h_addr_list);
while(addr^ <> nil) do begin
Result := Result + inet_ntoa(addr^^);
If not bGetAll then Break;
inc(addr);
If addr^ <> nil then Result := Result + ^M^J;
end;
end;
finally
WSACleanUp;
end;
end;
Der Parameter bGetAll gibt an, ob er nur die erste HauptIP (False) oder alle vorhandenen IPs (True) auslesen soll.
Ist kein Netzwerk (auch kein
IP Stack,etc) vorhanden, so gibts einen leeren String zurück.
Gibts einen String zurück, so kann folgendes geprüft werden:
If Result = '127.0.0.1' then ... // LAN Kabel ausgesteck oder Netzwerkverbindung getrennt
else ... // Mit LAN verbunden