Pegar IP da rede local

3 respostas
M

Boa noite. Estou usando a API Inet4Adress para pegar o IP da máquina a fim de deixar disponíveis serviços através do RMI. Porém percebi que quando estou com o modem da Vivo ativo, outras interfaces de rede são criadas e o método Inet4Address.getLocalHost().getHostAddress() retorna o IP do modem. Como faço para diferenciar a interface ativa, pois quero apenas a rede local.

String ip = Inet4Address.getLocalHost().getHostAddress();
        System.out.println(ip);           
        Naming.rebind("rmi://" + ip + ":" + "1099" + "/" + servico, i);

Saída:

177.27.27.232

apesar da rede ethernet local ser 1.1.1.1

3 Respostas

R

marcelopedras:
Boa noite. Estou usando a API Inet4Adress para pegar o IP da máquina a fim de deixar disponíveis serviços através do RMI. Porém percebi que quando estou com o modem da Vivo ativo, outras interfaces de rede são criadas e o método Inet4Address.getLocalHost().getHostAddress() retorna o IP do modem. Como faço para diferenciar a interface ativa, pois quero apenas a rede local.

String ip = Inet4Address.getLocalHost().getHostAddress();
        System.out.println(ip);           
        Naming.rebind("rmi://" + ip + ":" + "1099" + "/" + servico, i);

Saída:

177.27.27.232

apesar da rede ethernet local ser 1.1.1.1

Pelo que entendo o problema é na Placa que é detectada… não estou muito familiarizado com essa API mas tente ir ao Painel de controle (Caso use Windows)
e tente trocar o adaptador de rede Default (Nesse caso talvez do Modem) pelo da companhia…

tens documentação do API? se tiveres podes me enviar a documentação e o API e posso tentar dar uma analisada e depois te responder.

Abraços

M

Boa tarde. Ontem mesmo achei uma solução possível: usar a API NetworkInterface para visualizar as interfaces disponíveis e então escolher a de interesse.
O código ficou assim:



String ip = Inet4Address.getLocalHost().getHostAddress();                         //seta o ip com o endereço da primeira interface (caminho infeliz)

String nomehost = Inet4Address.getLocalHost().getHostName();                 //pega o nome do host

for(InetAddress inet: InetAddress.getAllByName(nomehost))                      //captura todos os endereços disponíveis de todas as interfaces

{

if(NetworkInterface.getByInetAddress(inet).getName().startsWith(“eth”)) //pega o nome da interface em que está setado o endereço da vez e verifica

//o nome da interface

{

ip = inet.getHostAddress();                                                               //caso seja a de interesse, seta ip e pára

break;

}

}
System.out.println(ip);


Agradeço a ajuda.

R

Vlw

Criado 23 de agosto de 2011
Ultima resposta 24 de ago. de 2011
Respostas 3
Participantes 2