Home » Tipps & Tricks » Netzwerk/Internet » Netzwerkeigenschaften » Lokale IP-Adressen ermitteln

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.

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 HostInfonil then Begin
          Addr:=Pointer(HostInfo^.h_addr_list);
          if (Addrnil) 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:

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