Obtendo o endereço IP REAL da maquina na rede

Como pegar o IP real do computador em Java.

Uma amiga @melissasrw me perguntou se tinha como pegar o IP da máquina em java. Prontamente respondi que sim, mas ela me informou de imediato que não queria o IP de loopback (127.0.0.1). Lembrei que já tinha feito isso para um projeto e dai veio a ideia de escrever esse post.

Em vários blogs e tutoriais tem o famoso código de obter o IP da máquina.

import java.net.*;
public class Ip{
   public static void main(String []args){
      String host ="";
      String endereco = "";
      try {
         InetAddress myself = InetAddress.getLocalHost();
         host = myself.getHostName();
         endereco = myself.getHostAddress();
      } catch (UnknownHostException ex){
         ex.printStackTrace();
      }
      System.out.println("HostName: "+host+" IP: "+endereco);
   }
}

Obtendo no Console a seguinte saída:

HostName: mariojp IP:127.0.0.1

Nesse caso a minha máquina tem o hostname mariojp, mas o IP que aparece é o 127.0.0.1 e o IP desejado é o da maquina na rede, algo como 192.168.1.10 ou 10.2.1.5 a depender de como esta configurada a rede. O IP que aparece no console ( 127.0.0.1 ) é o endereço de loopback .

Vamos então direto ao assunto, as formas de encontrar o endereço de rede são:

Opção 1. Usar o AlfredLibrary. A versão que esta saindo vai vir com a solução pronta para uso.

Opção 2. Usar um dos seguintes códigos: 

A. Sei qual é a interface de rede e sei o nome da maquina:
System.out.println("IP:"+InetAddress.getByName("mariojp.local").getHostAddress()); 
Observem que o mariojp é o nome da máquina e “.local” é o domínio (neste caso a máquina não está em nenhum domínio).

Obtendo no Console a seguinte saída:

IP: 10.2.1.76
B. Agora um código mais genérico para facilita o entendimento (eu espero)

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration; 
public class IP { 
   public static void main(String[] args) throws SocketException { 
      Enumeration e = NetworkInterface.getNetworkInterfaces(); 
      while (e.hasMoreElements()) { 
         NetworkInterface i = e.nextElement(); 
         Enumeration ds = i.getInetAddresses(); 
         while (ds.hasMoreElements()) { 
            InetAddress myself = ds.nextElement();
            System.out.println("HostName: " + myself.getHostName() + " IP: " + myself.getHostAddress()); 
         } 
      }
   } 
}

Obtendo no Console a seguinte saída:

HostName: fe80:0:0:0:21d:7dff:fe88:4996%2 IP: fe80:0:0:0:21d:7dff:fe88:4996%2 
HostName: mariojp.local IP: 10.2.1.76 
HostName: ip6-localhost IP: 0:0:0:0:0:0:0:1%1 
HostName: localhost IP: 127.0.0.1 

Retorna todos os HostNames e o IPs de todas as interfaces de REDE da máquina.

Espero ter ajudado mais alguém!!!

Post navigation

5 comments for “Obtendo o endereço IP REAL da maquina na rede

  1. 17 de maio de 2012 at 13:48

    Valeu Mário, estava vendo isso hoje. Até mais.

  2. 23 de maio de 2012 at 19:17

    acrescentado isto
    if (!myself.isLoopbackAddress() && myself.isSiteLocalAddress()) {
    myIp = myself.getHostAddress();
    }
    no while mais interno pega o endereço desejado.

  3. 5 de novembro de 2012 at 16:11

    muito bom esse tópico, tem como descobrir outros ips conectados na rede que o meu ip está?

Deixe uma resposta

%d blogueiros gostam disto: