[ rambo @ 12.01.2008. 00:54 ] @
Da li i kako može da se dobije dodeljena IP adresa računara (znači ona za default konekciju, tj. za default mrežni adapter) ali onda kada je mreža "unplugged" (kada je mrežni kabl otkačen)?

Ja sam probao na dva načina, i uvek sam adresu dobijao samo kada je kabl povezan.

Primer za prvi način je sledeći:

Code:

program IPHelper;

{$APPTYPE CONSOLE}

uses
  SysUtils, WinSock, JclSysInfo;

var
  sHost, sIP: String;
  nIP: Integer;

begin
  try
    sHost := GetLocalComputerName;
    sIP := GetIPAddress(sHost);
    nIP := inet_addr(PAnsiChar(sIP));
    Writeln('HostName: ', sHost);
    Writeln('IP address (string): ', sIP);
    Writeln('IP address (longint): ', nIP);
    Writeln('IP address components: ', (nIP and $000000FF), ', ', (nIP and $0000FF00) shr 8, ', ', (nIP and $00FF0000) shr 16, ', ', (nIP and $FF000000) shr 24);
    Readln;
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
end.


Drugi način je pomoću Indy komponente TIdIPWatch, ali i ona, u slučaju kada je kabl otkačen, vraća 127.0.0.1 (localhost).

Dakle, meni treba ona (fiksna) adresa koja je dodeljena na (default) LAN adapteru. Da li se to negde pamti u sistemu (i gde), i dali postoji neka API funkcija koja to može da mi vrati?

Unapred hvala.
[ savkic @ 12.01.2008. 15:59 ] @
> Da li i kako može da se dobije dodeljena IP adresa računara (znači ona za default konekciju, tj. za default mrežni adapter) ali onda kada je mreža
> "unplugged" (kada je mrežni kabl otkačen)?

Obično se adresa dobija od DHCP servera, ako nema mreže nema ni IP adrese. Ne verujem da je moguće ostvariti to (možda samo ako se ručno određuje IP adresa), pogledaj koje rezultate daje ipconfig.
[ rambo @ 12.01.2008. 16:31 ] @
ipconfig daje iste rezultate, tj. ne vraća ništa kada je adapter unplugged. Inače, kao što rekoh ranije, radi se o fiksnoj IP adresi, tj. nije (i ne treba da bude) DHCP.

Jedino rešenje koje mi za sada pada na pamet jeste da nađem način da pročitam šta je upisano u podešavanjima samog adaptera. Negde sam pročitao da se to upisuje negde u registry, ali i da ti podaci mogu da se dobiju putem određenih WinAPI funkcija. Pogledaću malo MSDN, pa ću da javim ako nađem nešto.
[ savkic @ 12.01.2008. 19:10 ] @
Pogledaj GetAdaptersInfo ili neku drugu IP helper funkciju, ako ne onda verovatno se može naći u redžistriju.
[ rambo @ 14.01.2008. 19:13 ] @
Ako ima još nekog koga interesuje odgovor na ovo pitanje, trenutno imam samo jedno jednostavno rešenje.

Dovoljno je da imate mali switch (5-portni) na koji su zakačeni svi računari, i sve će raditi kako treba
Naravno, switch treba uvek da bude uključen...

Ovo pišem samo zato što nisam imao vremena da tražim konkretno rešenje. Svakako, kada budem našao odgovor na svoje pitanje, postaviću ovde da pomognem i ostalima.