Obter informações de rede do localhost  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
helders
Thread.start()
[Avatar]

Membro desde: 20/02/2009 08:35:38
Mensagens: 27
Offline

Ola gente!

Estou com um pequeno problema, tenho uma aplicação que vai enviar um pacote RTP para a rede, para isso preciso do IP de broadcast da minha rede.

Quando seto manualmente o IP do meu broadcast (que no caso é 255.255.255.0) o software funciona normalmente, porém dessa forma não tenho portabilidade.

Preciso de uma forma de obter o IP do meu broadcast (do IP da placa de rede mesmo). Eu consigo obter o endereço IP da placa sem problemas. Também tentei encontrar o endereço da máscara de sub-rede para tentar realizar o cálculo e encontrar meu broadcast, mas não consegui obter essas informações.

Alguem sabe de uma saída?

PS.: eu já consegui alterar a propriedade do sistema e levar em consideração primeiro o IPv4.

Veritas vos Liberabit!

marcelo.bellissimo
Virtual Machine Man

Membro desde: 17/10/2006 14:17:21
Mensagens: 617
Offline

Eu acho que isso resolve:

Retorna um Enumeration de objetos NetworkInterface...
entanglement
GUJ Hacker

Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline

http://java.sun.com/javase/6/docs/api/java/net/NetworkInterface.html
helders
Thread.start()
[Avatar]

Membro desde: 20/02/2009 08:35:38
Mensagens: 27
Offline

Eu usei esse método Marcelo



assim eu tenho o NetworkInterface da minha placa wireless do notebook por exemplo, se eu mando exibir o Display name aparece o nome da placa certinho, a saída mostra:

Placa: Atheros AR5009 802.11a/g/n WiFi Adapter

Ai eu tento pegar as interfaces assim:



Quando eu faço isso o networkInterface.getInterfaceAddresses(); retorna nulo e eu não consigo pegar as informações das interfaces.

PS.: entanglement eu sei qual o endereço da biblioteca de classe e não estaria postando aqui se mesmo assim não tivesse dando certo, na próxima vez tente postar algo mais construtivo por favor.

This message was edited 1 time. Last update was at 09/04/2010 12:09:28


Veritas vos Liberabit!

marcelo.bellissimo
Virtual Machine Man

Membro desde: 17/10/2006 14:17:21
Mensagens: 617
Offline

Caramba... fiz os testes aqui e com esse mesmo algoritmo seu, eu consigo imprimir normalmente os endereços IP... algum programa estaria bloqueando a leitura desses dados, talvez? Veja a documentação do método:

If there is a security manager, its checkConnect method is called with the InetAddress for each InterfaceAddress. Only InterfaceAddresses where the checkConnect doesn't throw a SecurityException will be returned in the List.


http://java.sun.com/javase/6/docs/api/java/net/NetworkInterface.html#getInterfaceAddresses%28%29

Apenas interfaces onde o checkConnect não retorna uma SecurityException serão exibidas... talvez o problema seja esse...

This message was edited 1 time. Last update was at 09/04/2010 12:17:26

helders
Thread.start()
[Avatar]

Membro desde: 20/02/2009 08:35:38
Mensagens: 27
Offline

Hmm é possível. Eu li que por padrao ele pega sempre primeiro o IPv6, pra mostrar primeiro o IPv4 eu alterei a opção do sistema com esse método:



Coloquei ele antes do método ali em cima, tentei sem ele e também não retorna nada.

Há alguma forma de desativar essa verificação de segurança?

Veritas vos Liberabit!

marcelo.bellissimo
Virtual Machine Man

Membro desde: 17/10/2006 14:17:21
Mensagens: 617
Offline

Voce pode fazer o seu próprio método, pegue o fonte do SDK do Java e altere... aqui está o método:


A linha que tem o comentário é a linha que executa o checkConnect, se quiser, comente ela e pronto... faça os ajustes necessários na sua Classe, e teste... deve funcionar...>
helders
Thread.start()
[Avatar]

Membro desde: 20/02/2009 08:35:38
Mensagens: 27
Offline

Eu to tentando alterar esse método mas como faço isso?

Tentei criar minha classe com o mesmo nome, copia o conteúdo e comentar a linha mas um método init() da pau na hora de rodar. Tentei fazer uma classe que herda a NetworkInterface e sobrescrever o método mas nada também, implementar também não da...

Alguma idéia?

Veritas vos Liberabit!

marcelo.bellissimo
Virtual Machine Man

Membro desde: 17/10/2006 14:17:21
Mensagens: 617
Offline

Não precisa "clonar" a classe toda, apenas coloque esse método dentro do seu projeto, faça as alterações, e ao invés de chamar o método "original" chame o seu...
kemperacc
Java Ninja
[Avatar]

Membro desde: 11/11/2006 11:34:51
Mensagens: 288
Localização: Divinopolis
Offline

helders wrote:Ola gente!

Estou com um pequeno problema, tenho uma aplicação que vai enviar um pacote RTP para a rede, para isso preciso do IP de broadcast da minha rede.

Quando seto manualmente o IP do meu broadcast (que no caso é 255.255.255.0) o software funciona normalmente, porém dessa forma não tenho portabilidade.

Preciso de uma forma de obter o IP do meu broadcast (do IP da placa de rede mesmo). Eu consigo obter o endereço IP da placa sem problemas. Também tentei encontrar o endereço da máscara de sub-rede para tentar realizar o cálculo e encontrar meu broadcast, mas não consegui obter essas informações.

Alguem sabe de uma saída?

PS.: eu já consegui alterar a propriedade do sistema e levar em consideração primeiro o IPv4.


Cara, estuda sobre TCP/IP (mais especificamente sobre subrede).

O que voce esta falando nao eh broadcast nao, alias, 255.255.255.0 jamais sera um broadcast pois eles sempre sao impar.

O broadcast é o ultimo endereco de um segmento de rede TCP/IP, quem vai definir o broadcast de uma rede é a mascara.

http://www.juliobattisti.com.br/artigos/windows/tcpip_p7.asp

[]s

Kemper

Um feito eh impossivel ateh que alguem o faca...

ABAIXO DEFAULTTABLEMODEL!!!
[Email] [WWW] [MSN]
helders
Thread.start()
[Avatar]

Membro desde: 20/02/2009 08:35:38
Mensagens: 27
Offline

Ola kemperacc,

Sei exatamente o que é broadcast

O fato de querer a mascara de sub-rede é exatamente para poder CALCULAR qual o broadcast (se sei calcular eu acho que sei o suficiente sob broadcast )

Não há uma forma de obter o endereço de broadcast em java, por isso preciso da mascara de sub-rede para conseguir calcular qual é meu endereço de broadcast, baseado em meu IP e em minha mascara de sub-rede.

Veritas vos Liberabit!

marcelo.bellissimo
Virtual Machine Man

Membro desde: 17/10/2006 14:17:21
Mensagens: 617
Offline

Exatamente...

E aí, algum progresso?
helders
Thread.start()
[Avatar]

Membro desde: 20/02/2009 08:35:38
Mensagens: 27
Offline

Bom marcelo, espero q eu tenha entendido certo, vamos la:



Exception in thread "main" java.lang.NullPointerException
at teste.Main.getInterfaceAddresses(Main.java:17)
at teste.Main.main(Main.java:54)

Essa linha 17 corresponde ao FOR do método de cima, esse bindings[] ta vazio, eu olhei na classe NetworkInterface e não achei nada que preenche ele, o que é muito estranho, nem no construtor default...

Veritas vos Liberabit!

marcelo.bellissimo
Virtual Machine Man

Membro desde: 17/10/2006 14:17:21
Mensagens: 617
Offline

É, realmente... estou tentando descobrir como funciona isso aí... alguém ai teria algo á dizer, pra ajudar?
Fiquei curioso agora...

Se eu descobrir algo eu posto aqui...
kemperacc
Java Ninja
[Avatar]

Membro desde: 11/11/2006 11:34:51
Mensagens: 288
Localização: Divinopolis
Offline

Talvez isso te ajude, fiz aqui agora um codigo que lista todas as interfaces e todos os ips da maquina:

Um fato interessante a ressaltar é que cada interface pode ter N ips, e cada equipamento pode ter N interfaces, agora creio que seu problema será descobrir qual broadcast voce quer!

hehehe


Um feito eh impossivel ateh que alguem o faca...

ABAIXO DEFAULTTABLEMODEL!!!
[Email] [WWW] [MSN]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team