Array
(
)

Obter IP local no Linux corretamente

Dopi
   - 05 jan 2005

Ola para todos...

Estou desenvolvendo uma aplicação Multiplataforma... e nela preciso saber o IP local que a estação está... geralmente esse IP é atribuido por algum servidor DHCP da rede...

Tentei usando os seguintes componentes:

IP := IdIPWatch1.LocalIP ; { IdIPWatch }

ou

IP := TcpServer1.LocalHostAddr ; { TcpServer }

Ambos funcionam bem no Windows mas no Linux sempre retornam 127.0.0.1

Alguma sugestão ?


Dopi
   - 11 jan 2005

Procurei tanto... e a solução estava bem perto...

A muito tempo uso no projeto ACBr a classe SynaSer para acesso a serial em Windows/Linux... o mesmo autor da SynaSer também desenvolveu o projeto Synapse ( Synchronous TCP/IP Library for Delphi, C++ Builder, Kylix and FreePascal ) http://www.ararat.cz/synapse/

Usando o TBlockSocket consegui acessar corretamente o IP da máquina no Windows e Linux...
#Código


procedure TForm1.Button1Click(Sender: TObject);
Var blsock : TBlockSocket ;
IPs : TStringList ;
I : Integer ;
begin
blsock := TBlockSocket.create ;
IPs := TStringList.Create ;
IPs.Clear ;

blsock.ResolveNameToIP(blsock.LocalName,IPs) ;
Label1.Caption := ´Localname: ´+blsock.LocalName+sLineBreak+
´IPs: ´+sLineBreak ;
For I := 0 to IPs.Count-1 do
Label1.Caption := Label1.Caption + IPs[I] + sLineBreak ;
end;


A procedure TBlockSocket.ResolveNameToIP consegue inclusive capturar o IP dinâmico atribuido por uma conexão DialUp / Speed...