Auf den Zug will/muss ich mal aufspringen:
... Also wenn Du die
IP ermitteln möchtest, musst du wissen von welchem Adapter du diese auslesen willst.
Beispiel Notebook:
W-Lan, NIC, ISDN, ADSL, Firewalls, Virenscanner, BlueTooth usw.
Hier kann es möglich sein, dass bis zu 7
IP's (Adaptoren) vorhanden sind.
Also Kurz und einfach, ohne sich genauer mit der Materie zu beschäftigen, wirds nicht gehen!
Wie kann ich das herausfinden?
Ich brauche genau den Adaptor, mit dem ich im lokalen Netz verbunden bin. Folgende Funktion liefert mir zwar mehrere
IP. Dass die letzte nicht immer die passende sein muss, ist mir dabei klar. Aber wie löse ich dieses Zuordnungsproblem?
Delphi-Quellcode:
Function GetLocalIP: String;
Type
TaPInAddr = Array [0..10] Of PInAddr;
PaPInAddr =^TaPInAddr;
Var
Buffer : PAnsiChar;
aWSAData : TWSAData;
aHostEnt : PHostEnt;
pptr : PaPInAddr;
I : Integer;
Begin
Result:= '';
Buffer:= Addr(Result[1]);
If (WSAStartup($0101, aWSAData) = 0) Then
Try
If (GetHostName(buffer, MAX_PATH) <> 0) Then
Begin
aHostEnt:= GetHostByName(buffer);
If (aHostEnt <> nil) Then
Begin
pPtr:= PaPInAddr(aHostEnt^.h_addr_list);
I:= 0;
While (pPtr^[I] <> nil) Do
Begin
Result:= String(inet_ntoa(pptr^[I]^));
Inc(I);
End;
End;
End;
Finally
WSACleanup;
End;
End;
Ich habe übrigens 3
IP-Adressen: 1x LAN, 1x WLAN, 1x VirtualBox-Adapter. Das Problem dabei ist, dass ich an 2 Laptops mit gleicher Konfiguration unterschiedliche Ergebnisse bekomme. Ich vermute, dass es allein an der Installationsreihenfolge der Treiber liegt.
P.S. Ich finde übrigens diese überall zu findende Funktion nicht so furchtbar, dass man sich nach Java flüchten müsste.