Thema: Delphi Lokale IP(s) ermitteln

Einzelnen Beitrag anzeigen

MathiasSimmack
(Gast)

n/a Beiträge
 
#3
  Alt 31. Jan 2003, 12:21
Da unser Chak-o-tay ab und zu bei www.ensacom.de Tipps veröffentlicht, habe ich mal von dort die IP-Funktion abgeschrieben (mehr oder weniger ):
Delphi-Quellcode:
uses
  WinSock;

function GetLocalIPs: string;
type
  PPInAddr = ^PInAddr;
var
  wsadata : TWSAData;
  hostinfo : PHostEnt;
  addr : PPInAddr;
begin
  Result := '';

  if(WSAStartUp(MAKEWORD(1,1),wsadata) = 0) then
  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^^) + ^M^J;
        inc(addr);
      end;
    end;
  finally
    WSACleanUp;
  end;
end;
Warum?
Weil sie -laut Beschreibung!- alle IPs zurückliefert. Mangels LAN kann ich das im Moment zwar nicht prüfen, aber ich vertraue einfach mal darauf, dass bei ensacom kein Blödsinn steht. (Wer ein LAN hat bzw. eine eingebaute Netzwerkkarte, kann´s ja mal fix testen und Bescheid sagen.)


Übrigens: MAKEWORD(1,1) ist das selbe wie $0101. Ich finde es nur lesbarer, weil man die Versionsnummer ohne viel Rumraten erkennt und einstellen kann. Ohne groß zu Überlegen: wie würde man hexadezimal die Version 2.0 angeben? Wer jetzt gedacht hat $0200 liegt leider falsch. Anders herum wäre richtig: $0002; da das niederwertige Byte die Hauptversionsnummer angibt.

So ein Missgeschick kann mit MAKEWORD(2,0) nicht geschehen.

Kann man im PSDK zu "WSAStartup" nachlesen.
  Mit Zitat antworten Zitat