Listar IP's da rede

1. Listar IP's da rede

Gustavo Quirino Ferreira
gqferreira

(usa Ubuntu)

Enviado em 06/09/2011 - 23:22h

Boa noite pessoal.

Estou fazendo um Chat em Java desktop e precisaria fazer um broadcast para descobrir os clientes que estão ativos na sub rede, uma LAN. O aplicativo é para comunicação em uma rede interna. Como não consegui nada em Java que fornecesse isso, vou tentar fazer um script que faça isso e pegar o resulta para o aplicativo. O problema é que já vasculhei a net toda (que exagero ¬¬) e não encontrei nada além do arp-scan. Achei esse pacote muito bom, faz direitinho o que preciso, o problema é que ele precisa ser executado como root e isso quebra totalmente a flexibilidade do meu programa por ter que subi-lo como root ou ficar pedindo senha para o usuario (que pode nem ser root ou não pertencer ao grupo admin).

Ambiente esclarecido, a pergunta:

Existe outro meio de obter todos os IP's de uma LAN ou executar o script (para chamar o arp-scan) passando a senha de root salva?

Obrigado pessoal!


  


2. Listar IP's da rede

Márcio Carolino G. de Brito
marciocarolino

(usa Debian)

Enviado em 07/09/2011 - 09:50h

Bom dia!.

Como você falou, usou o arp-scan e funcinou, mas precisou executa-lo como root e colocar senha.
você pode criar um scrit e colocar no /etc/init.d/ e depois criar um link para o rc alguma coisa, para saber e so digitar

# runlevel

Vai aparecer o nível e você direciona para lá.

#ln -s /etc/init.d/arp-scan.sh /etc/rc ( o número do runlevel.)/S99arp-scan


ou em último caso você pode colocar o arp-scan para executar no contrab.
Mas não pode esquecer que o crontab é um dispertador assim dizendo ou seja,todo dia ou semana, ou mês, ano, ele irá executar o que você determinou.
Caso tenha dúvidas em como fazer o agendamento no contrab ou no seu script e só postar que vamos ajuda-lo.

Abraços!!.





3. Re: Listar IP's da rede

Gustavo Quirino Ferreira
gqferreira

(usa Ubuntu)

Enviado em 07/09/2011 - 12:36h

Tentei rodar o comando "# ln -s /etc/init.d/arp-scan.sh /etc/rc2/S99arp-scan"
Criei o arquivo arp-scan.sh no caminho indicado e coloquei a chamada à biblioteca dentro.
Dei o comando como root.
O meu runlevel deu 2.

O erro foi:
ln: criando ligação simbólica `/etc/rc2/S99arp-scan': Arquivo ou diretório não encontrado.

Ha.. o crontab so seria possivel se desse para ser configurado como usuario comum e nao precisasse especificar data certa, por exemplo: executar daqui a 0 segundo a acao tal.

Obrigado pela atenção amigo, continuo na luta ^^


4. Listar IP's da rede

Márcio Carolino G. de Brito
marciocarolino

(usa Debian)

Enviado em 08/09/2011 - 11:29h

O caminho que você colocou está errado.

o certo é.:

# ln -s /etc/init.d/arp-scan.sh /etc/rc2.d/S99arp-scan

#------- Ficou faltando aqui o " rc2.d " ----------------#

Lembrando que o script precisa ficar como executável.

#chmod +x /etc/init.d/arp-scan.sh


Depois coloca o seu script aqui para que possamos ajuda-lo.

Todos os programas que irão iniciar no seu sistema estão dentro do rc2.d
caso que você queira mudar alguns programas e não queria que começe com o sistema e só mudar.


# cp S(programa X ) K(nome do mesmo programa)

Exemplo.:


# cp /etc/rc2.d/S99arp-scan /etc/rc2.d/K99arp-scan





5. Re: Listar IP's da rede

José Mário
miura 787

(usa Ubuntu)

Enviado em 09/09/2011 - 11:37h

Eu acredito que a estratégia que vc está usando para o chat não é a melhor!

Não deveria varrer a rede p/ saber quais clientes estão on-line e sim o inverso.

Cada cliente que sobe deve enviar ao servidor (que tem IP Fixo ou nome de host conhecido) seu IP junto com as outras informações importantes. Assim o servidor adiciona o cliente na lista de clientes on-line e disponibiliza a lista de volta.

Desta forma vc não precisa de comandos nativos, mantendo seu projeto independente de plataforma (que é o que se busca em Java).

Qual tecnologia vc está usando? RMI, Sockets?


6. Re: Listar IP's da rede

Gustavo Quirino Ferreira
gqferreira

(usa Ubuntu)

Enviado em 09/09/2011 - 12:08h

Então... estou tentando fazer um chat independente de ter ou não servidor.
Estou usando apenas Servlets rodando em um Apache embarcado em minha aplicação.

(Atualmente)
Minha aplicação tem uma servlet chamada "handshake".
Quando um cliente inicia, calcula todos os possíveis IP's da rede baseado na mascara de rede.
Em seguida, sai enviando para todos os IP's a procura da servlet "handshake" na porta 1392. Quem responder passa a aparecer na lista "online" e o outro cliente que recebeu o "handshake" também me adiciona. Assim eu não preciso de um servidor e posso rodar meu aplicativo em qualquer LAN.

Só que dessa forma eu tenho que ficar disparando contra todos os IP's mesmo que seja sequencialmente. (nao tudo de uma vez... meo deos... seria horrivel) Isso é lento e deselegante.

Ha.. Marcio, obrigado pela ajuda, ainda não pude testar, estou meio sem tempo no trampo, isso é um projeto particular e puramente didático. Vou testar assim que conseguir uma folguinha...


7. Re: Listar IP's da rede

José Mário
miura 787

(usa Ubuntu)

Enviado em 12/09/2011 - 12:49h

Vc vai criar um tráfego grande só p/ manter os clientes on-line?

Imagine só todos pingando na rede o tempo todo?

Também seria mais complexo para gerenciar os contatos de cada pessoa (ou todo mundo verá todo mundo da LAN?)

Ainda acredito que um servidor seria uma boa idéia!

No entanto a tentativa é boa p/ quebrar a cabeça e ter idéias novas!


8. Re: Listar IP's da rede

euteste da silva
foxbit3r

(usa Solaris)

Enviado em 12/09/2011 - 12:53h

Resposta 1: Configurar o sudo para executar o comando arp-scan como root, assim vc não precisa virar root.
Resposta 2: Sim, ping -B 192.168.1.255(broadcast)


9. Re: Listar IP's da rede

Gustavo Quirino Ferreira
gqferreira

(usa Ubuntu)

Enviado em 12/09/2011 - 20:01h

Cara... to tentando entender porque não consigo executar um "ping -b". Em tudo quanto é forum tem isso...
Meu gateway é 192.168.0.1, netmask é 255.255.255.0 e consequentemente o ip de broadcast é 192.168.0.255 e mesmo assim não vai!
Em minha casa os terminais são com IP fixos. O meu note é 192.168.0.2, meu smartphone é 192.168.0.3 e o desktop é 192.168.0.4.

Dou um $ping -b 192.168.192.255 e o negócio fica a eternidade lá... não vai nem pra frente pra tráz... simplesmente não acontece mais nada depois de dar o comando..


10. Re: Listar IP's da rede

Gustavo Quirino Ferreira
gqferreira

(usa Ubuntu)

Enviado em 12/09/2011 - 22:10h

Gente, olhem as imagens para ver como estou pensando...
https://picasaweb.google.com/108003299509977028117/Chat

Miura, não entendi porque congestionar a rede. Se o ping-broadcast levar em cerca de alguns segundos não será nada congestionante, pelo menos o arp-scan é super rápido.
Os usuários não ficarão o tempo todo disparando broadcast, é só quando o sistema inicia, somente para listar os terminais que estão ativos na rede. Na hora de mandar as mensagens o chat já sabe para qual IP mandar. Se eu quero mandar uma mensagem para a Maria e sei que o IP dela é 192.168.0.3, já vou direto.

A questão dos meus IPs em casa serem fixos é mera coincidência, quero fazer com que o Chat funcione em LAN de IP dinâmico, ou seja, o broadcast quando inicia é necessário.

A criação de um servidor não iria mudar muito. Quando um usuário informar para o servidor que está saíndo, o servidor precisará notificar todos os clientes conectados a si do mesmo jeito. A diferença é que o servidor teria uma lista de quem está online. Da minha maneira, todos os clientes tem o IP de todos da rede (os que executam o chat)

O processo é simples (relativamente) e já fiz funcionar com o arp-scan.
1 passo: Eu entro na rede obtenho a lista de IPs ativo (que pode ser bem pequeno em relação a quantidade máxima de endereços da LAN)
2 Passo: Para os que estão ativo na rede, mando uma mensagem na porta 1392 esperando por uma resposta.
3 Passo: Quem responder eu adiciono em minha lista de contatos.
4 Passo: Quando quiser enviar uma mensagem, escolho um dos contatos da lista, escrevo o texto e envia para o IP desse contato.

Quando algum contato quiser sair, manda para cada um dos seus contatos (o que o servidor faria) uma mensagem para anunciar a saída para que esses possam remove-lo de suas listas.

A mesma coisa acontece quando ele voltar e mandar para todos os ouvintes (que respondem na porta 1392, mesma coisa que o servidor faria) perguntando se eles o entendem. Automaticamente todos os outros contatos se atualizam quando recebem essa mensagem.

OBS: Os "ping -b 192.168.0.255" é só para representar como deveria funcionar... comigo não funcionou ¬¬ bateu uma luz agora! Será que é pelo fato de as máquinas estarem com IP fixo? Eu os fixei pelo macadress no DHCP do roteador... bom, pelo menos esclareci o máximo nesse post, vou deixar todos com IP dinâmico e depois posto se deu certo.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts