[Resolvido] pegar os IPs de maq. com multiplas conexões de rede

7 respostas
sf.marcius

olá pessoal.

me deparei com um problema em que preciso saber o ip da máquina que está rodando minha app, mas esta máquina pode possuir várias conexoes de rede.
deste modo, InetAddress.getLocalHost().getHostAddress() não está funcionando pq esta linha está retornando somente um dos IPs.

Ja pesquisei no forum e não achei nada neste sentido.
existe algum meio de se obter todos os ips de uma máquina com múltiplas placas de rede conectadas a múltiplas lans?

agradeço desde já.

7 Respostas

T

getAllByName

import java.net.*;

class GetAllByName {
    public static void main(String[] args) throws UnknownHostException {
        // Imprime apenas "localhost/127.0.0.1"
        for (InetAddress ia : InetAddress.getAllByName ("localhost")) {
            System.out.println (ia);
        }
        // Deve imprimir todos os endereços do host local. 
        for (InetAddress ia : InetAddress.getAllByName (InetAddress.getLocalHost().getHostName())) {
            System.out.println (ia);
        }
    }
}
sf.marcius

valeu aí cara, mas nao está funcionando.

o código:

// Deve imprimir todos os endereços do host local.   
        for (InetAddress ia : InetAddress.getAllByName(InetAddress.getLocalHost().getHostName())) {
            System.out.println(ia);
        }

está retornando:
Marcius-PC/127.0.1.1

Obs: meu SO é o Ubuntu 9.04
o q será que pode ser?

T

De fato, em máquinas Linux “InetAddress.getLocalHost().getHostName()” realmente retorna o nome correto, mas ele mapeia sempre para 127.0.0.1.
Use o programa a seguir.

import java.net.*;
import java.util.*;

class GetAllByName {
    public static void main(String[] args) throws UnknownHostException, SocketException {
        // Imprime apenas "localhost/127.0.0.1"
        for (InetAddress ia : InetAddress.getAllByName ("localhost")) {
            System.out.println (ia);
        }
        System.out.println();
        // Deve imprimir todos os endereços do host local.
        for (InetAddress ia : InetAddress.getAllByName (InetAddress.getLocalHost().getHostName())) {
            System.out.println (ia);
        }
        System.out.println();
	// No caso de uma máquina Linux, é necessário listar as interfaces de rede. Normalmente a primeira placa de rede é eth0,
        // mas em uma máquina Solaris as interfaces de rede têm nomes diferentes e relacionados com o driver usado.
        for (NetworkInterface ni : Collections.list (NetworkInterface.getNetworkInterfaces())) {
            System.out.println ("Interface de rede: " + ni.getName() + " (" + ni.getDisplayName() + ")");
            System.out.println ("Endereços de rede associados à interface " + ni.getName() + ":");
            for (InetAddress ia : Collections.list (ni.getInetAddresses())) {
                 System.out.println (ia);
            };
            System.out.println();
        }
    }
}
sf.marcius

opa!

valeu aeh Thingol. worked like a charm! :smiley:

só uma dúvida… esse último código funciona em windows também ou eu terei que fazer uma lógica que detecte o SO e apartir deste faça o procedimento correto?

[]s

T

Testei em Windows; estava esperando você me dizer que estava funcionando no Ubuntu.

sf.marcius

blz

brigadão aeh cara! :slight_smile:

alguém com super poderes aeh, marque este tópico como resolvido :slight_smile:

feito!

T

Quem tem superpoderes é você mesmo. Edite seu primeiro tópico e mude o título para “Pegar os IPs de maq. com multiplas conexões de rede [resolvido]”

Criado 14 de julho de 2009
Ultima resposta 14 de jul. de 2009
Respostas 7
Participantes 2