Algorítimo para listar todos os IPs da rede

Blz Galera!!

Estou precisando criar um algorítimo que liste todos os IPs da rede onde está o meu programa, só não sei como fazer isso…

Alguém tem uma ideia?

Cara também to querendo fazer isso com um aplicativo que tenho, andei procurando um pouco e achei esse link eu não sei se vai ajudar mas dá uma olhada ai, e se der certo ou errado avisa aí

http://javafree.uol.com.br/topic-863962-Urgente-Ip-rede.html

Qualquer coisa post a solução se a encontrar, flw!

Iae Galera,

Então eu uso no Java o código abaixo para pegar o IP do usuário logado na página, caso isso Ajude. Tá na mão

[code]FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest)context.getExternalContext().getRequest();
request = (HttpServletRequest)context.getExternalContext().getRequest();

String ip = request.getRemoteAddr();[/code]

Acho q vc vai ter de partir da maquina q esta rodando como servidor e pingar as demais.

public static void pingar(String host) { try { if (InetAddress.getByName(host).isReachable(5000)) System.out.println("Ping OK: " + host); else System.out.println("Ping FALHOU: " + host); } catch (Exception e) { System.err.println("Ping FALHOU: " + host + " - " + e); } }

edit:
Este codigo mostar o ip da maquina

System.out.println("IP/Localhost: " + InetAddress.getLocalHost().getHostAddress() ;

Ivan Alves, no link é dito para calcular os possíveis IPs da rede a partir do Endereço da Rede e da Mascara da Rede. Só não sei como se faz este calculo!! to dando uma pesquisada em outros locais, mas se alguém poder ajudar…

Jhoni_Bravo, este código pode ser útil, mas pra uma outra parte que vou precisar logo após conseguir isso, obrigado…

avsouza, estava pensando que precisaria fazer assim mesmo, pigar um a um e ver se estão disponíveis, mas eu tenho que calcular os possíveis IPs da rede para poder ir pingando um a um…

Alguém sabe como fazer este calculo e conseguir uma lista dos possíveis IPs de uma rede?? a partir do Endereço da Rede e da Mascara da Rede, ou de qualquer outra forma… :smiley:

vlw

Você pode fazer o server mandar um pacote broadcast em determinada porta para os clients escutarem e responderem, assim você conseguirá saber quem está na rede.

Vixxii, eu até já ouvi falar disso e já pesquisei como louco para fazer-lo, seria ótimo, mas não encontrei nenhum exemplo…

Tbm estou tendo dificuldades em achar um exemplo de como calcular os possíveis IPs a partir da mascara de rede, para então pingar um a um e ver quem responde… :frowning:

Ninguem??? :cry:

O esquema do broadcast é o seguinte, se seu ip é 192.168.0.2 e sua máscara for 255.255.255.0, então o endereço de broadcast da sua rede é 192.168.0.255. Seu server manda um pacote para este endereço e na porta X que você escolher. Quem estiver nessa rede, escutando na porta X, vai receber o pacote e poderá responder para o ip do servidor avisando que está online. O endereço de broadcast serve para mandar pacotes para todos da rede.

soaresinfo, consegui calcular o endereço broadcast da minha rede, e é claro consigo pingar o mesmo, mas como pego as respostas?

obrigado pela ajuda.

quer dizer, eu até sei pegar a resposta de um ping normal, mas este vai trazer a resposta de todos os dispositivos da rede…

Alguém consegue me ajudar com isso?

Como posso efetuar um ping no endereço broadcast e recuperar os dispositivos que responderam?

Se você conseguiu fazer cada cliente receber o ping, blz, meio caminho andado. Agora você precisa fazer a volta. Ao invés de fazer o cliente responder imediatamente, mande dar um sleep por um tempo aleatório, não queremos inundar o server com todos os clientes respondendo ao mesmo tempo. Cada cliente deve mandar outro pacote diretamente para o servidor, pode ser na mesma porta, com este pacote você consegue identificar qual ip está ativo.

Se você conseguiu fazer cada cliente receber o ping, blz, meio caminho andado. Agora você precisa fazer a volta. Ao invés de fazer o cliente responder imediatamente, mande dar um sleep por um tempo aleatório, não queremos inundar o server com todos os clientes respondendo ao mesmo tempo. Cada cliente deve mandar outro pacote diretamente para o servidor, pode ser na mesma porta, com este pacote você consegue identificar qual ip está ativo.[/quote]

Eu acho que vocês não estão pensando a mesma coisa… o softlesk quer mandar um ping normal para o endereço de broadcast e saber quem respondeu, sem ter que fazer nada nas máquinas que vão responder o ping. Já o soaresinfo parte do princípio que nos clientes existe uma aplicação dedicada a comunicar-se com o servidor, respondendo aos pacotes de maneira controlada.

No momento não tenho nenhuma idéia útil, desculpe me intrometer sem ter nada para contribuir, foi só para esclarecer essa pequena falha de comunicação… mas vou pensar no assunto… a solução de pingar um de cada vez continua de pé?

opa gomesrod, blz?

já ajudou a esclarecer, agora entendi melhor o que o soaresinfo esta dizendo, mas realmente eu não tenho uma aplicação rodando em todas as estações.

está de pé sim a ideia de ir pingando um a um

desde já agradeço a ajuda de todos.

se é só para saber a máquina que está on o ping é suficiente. Mas a solução postada pelo soares é a mais robusta, além de ser simples.

Basta montar um pacote udp e disparar brodcast. O interessante dessa solução é que a resposta pode incluir dados específicos, como o versionamento do software.

Também gostei da solução do soares, mas como coleto as respostas dos equipamentos, sem ter um agente rodando em cada maquina?

[quote=juliocbq]se é só para saber a máquina que está on o ping é suficiente. Mas a solução postada pelo soares é a mais robusta, além de ser simples.

Basta montar um pacote udp e disparar brodcast. O interessante dessa solução é que a resposta pode incluir dados específicos, como o versionamento do software.[/quote]

De fato, essa solução é mais elegante , mas tem o incoveniente de necessitar de uma porta escutando em cada máquina.
Bom, seu eu estivesse no Linux eu não teria dúvidas em escrever um shell script para isso. E por outro lado, não consigo imaginar a utilidade disso no contexto de uma aplicação.

[quote=rmendes08][quote=juliocbq]se é só para saber a máquina que está on o ping é suficiente. Mas a solução postada pelo soares é a mais robusta, além de ser simples.

Basta montar um pacote udp e disparar brodcast. O interessante dessa solução é que a resposta pode incluir dados específicos, como o versionamento do software.[/quote]

De fato, essa solução é mais elegante , mas tem o incoveniente de necessitar de uma porta escutando em cada máquina.
Bom, seu eu estivesse no Linux eu não teria dúvidas em escrever um shell script para isso. E por outro lado, não consigo imaginar a utilidade disso no contexto de uma aplicação.[/quote]

Eu posso te mostrar inúmeras razões para usar essa solução. Já pensou em encontrar uma câmera ip em uma rede de centenas de dispositivos?
http://www.citrox.com.br/site/miamarti/index.php?option=com_content&view=article&id=15&Itemid=24

Não implementar um “who is” em um dispositivo que exige cominicação tcp ou udp é uma falha grave no desenho do mesmo(software ou hardware).

“Controle de acesso” é um dispositivo que controla alarmes, fechaduras magnéticas. Se ele simplesmente “sumir” em uma rede pode gerar um transtorno enorme .

Existem muitas aplicações onde é essencial usar um “who is”.

Mas é exatamente esse o ponto que eu questionei. Nesse exemplo das câmeras, provavelmente há algum software escutando em alguma porta tcp/udp. Nesse caso, faz todo sentido um nó central enviar um pacote broadcast para listar os IP’s das câmeras ativas e monitorar suas atividades. Para um motor de busca funcionar por exemplo, ele busca por processos escutando na porta 80. Ok.

O que eu não vejo utilidade em uma aplicação específica é listar os IP’s da rede utilizando apenas comandos ICMP.