Olá, sou novo no forum e estou querendo desenvolver uma aplicação java que liste os ips e o nome dos computadores da rede, gostaria da ajuda de vocês para me ajudar a obter essas informações. Tenho experiência em outras linguagens e sou novo no java e estou querendo desenvolver essa aplicação ate como uma forma de aprendizado.
Cara, acho o que você quer, não é tão simples de fazer, você teria que percorrer todos os possiveis ip’s e testar se estão ativos. Isso demanda um tempo, mas você pode usar threads, e também pode utilizar uma faixa de ip, como por exemplo ip’s que estão entre 192.168.0.0 e 192.168.0.255. Dê uma lida na documentacao da classe InetAddress, ela possui alguns metodos que podem ajudar.
Seguindo a sugestão do marcobiscaro2112 fiz um exemplo meio na gambiarra (acredito ter uma forma mais inteligente para fazer isso) mais como sou novo em java creio que vale a intenção. Pesquisei em alguns foruns e percebi que muitas pessoas querem fazer a mesma coisa. Sugestões, dicas são bem vindas afinal estou iniciando minha jornada em java.
import java.io.*;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.*;
import java.util.regex.*;
public class IpLanTest {
public static void main(String[] args) throws IOException {
Process cmd = Runtime.getRuntime().exec("net view");
BufferedReader in = new BufferedReader(new InputStreamReader(cmd.getInputStream()));
List lista = new ArrayList();
List listaIp = new ArrayList();
while (true) {
String line = in.readLine();
if (line == null) {
break;
}
Pattern p = Pattern.compile("^\\.*$");
Matcher m = p.matcher(line);
if (m.matches()) {
String nameComputer = m.group(0).replace("\", "").replace(" ", "");
lista.add(nameComputer);
try{
InetAddress address = InetAddress.getByName(nameComputer);
listaIp.add((String) address.getHostAddress());
}catch (UnknownHostException uhe) {
}
}
}
in.close();
String[] name = (String[]) lista.toArray(new String[0]);
String[] nameIP = (String[]) listaIp.toArray(new String[0]);
System.out.print("COMPUTADOR \t\tIP\n");
for (int i = 0; i < nameIP.length; i++) {
System.out.print(name[i] + " \t\t" + nameIP[i] + "\n");
}
}
}
De fato foi meio gambiarra. Tanto que tira uma das grandes características do Java: multiplataforma. Não funciona no Linux. Vou pesquisar mais sobre o assunto e dou uma resposta assim que possível.