Entwickler-Ecke

Internet / Netzwerk - Wirklich alle eigenen IPs rausfinden


alias5000 - Sa 10.03.07 01:28
Titel: Wirklich alle eigenen IPs rausfinden
Hi!
Ich verwende in meinem Netzwerkchat folgende Funktion, um alle IP Adressen von allen lokal installierten Netzwerkadaptern zu bekommen (Quelle: Swissdelphicenter):

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
function GetLocalIPs(const Lines:TStrings):Boolean;
type
  PPInAddr= ^PInAddr;
var
  wsaData: TWSAData;
  HostInfo: PHostEnt;
  HostName: Array[0..255of 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<>nilAND (Addr^<>nilthen 
             Repeat
                    Lines.Add(StrPas(inet_ntoa(Addr^^)));
                    inc(Addr);
             Until Addr^=nil;
       end;
    end;
    Result:=True;
  finally
    WSACleanup;
  end;
end;


Dabei ist es nicht ausreichend, einfach localhost, oder 127.0.0.1 zu verwenden, da ich die Computer per IP unterscheiden können muss und dabei mein eigener PC natürlich auch nur einer sein darf.
Ich muss also z.B. UDP- Broadcasts, die auf einem anderen Netzwerkadapter wieder reinkommen, überprüfen können, ob ich das selbst losgeschickt habe.

Bisher hat das auch gut funktioniert.
Jetzt habe ich das mal auf folgendem System getestet:
Windows ME
Kabelgebundenes Ethernet, Verbindung zum Router, IP automatisch beziehen (war wahrscheinlich 192.168.0.92)
aktiviertes WLAN zum selben Router, feste IP: 192.168.0.152

Meine Funktion spuckte mir aber nur 127.0.0.1 aus, was mir in dem Fall nichts bringt, da 192.168.0.95 und 192.168.0.152 mindestens hätten kommen sollen.

Gruß
alias5000


Delete - Sa 10.03.07 09:41

Schau mal hier - ist mit Sourcecode:

http://www.delphi.int.ru/files/sources/sources_n/nettrafmonitor.zip


Narses - So 11.03.07 00:00

Moin!

Haste mal diese Funktionen hier [http://www.delphi-forum.de/topic_53259.html] probiert? ;) Als Hostname Leerstring übergeben.

cu
Narses


alias5000 - So 11.03.07 00:07

hm. Also ich kämpfe gerade noch mit dem ersten Vorschlag. Der hat mir auf allen Rechnern schonmal richtige Ergebnisse gebracht :D Die Umsetzung in mein Programm hakelt noch ein wenig.
Deine Routine baut ja eigentlich wie meine auf GetHostByName auf, aber ist ein wenig komplexer, wie es beim ersten Überfliegen scheint.
Ich werds auf jeden Fall mal testen.
Aber jetzt erstmal gute Nacht ;)

Gruß
alias5000