Pessoal boa tarde,
Eu estava vendo no google um exemplo de PortScanner em Java, e o que mais tem são exemplos explicando como criar, a idéia da maioria das pessoas que publicaram o tutorial é a seguinte:
Cria um objeto socket passando o IP e a porta dentro de um bloco try caso conecte feche o socket se não a exceção é tratada. Mais ou menos assim:
for(int i=startPortRange; i <=stopPortRange; i++)
{
try
{
Socket ServerSok = new Socket("127.0.0.1", i);
System.out.println("Port in use: " + i );
ServerSok.close();
}
catch (Exception e)
{
}
System.out.println("Port not in use: " + i );
}
No entanto acho que isto esta errado pois testando aqui ate IP que não existe ele fala que a porta esta em uso hehe.
Daí tive a seguinte idéia, criei um objeto socket e um DataInputSream que se conectado vai receber alguma resposta da máquina.(ou pelo menos deveria).
Vejam:
try {
Socket clientSocket = new Socket("127.0.0.1", 2020);
clientSocket.setSoTimeout(3000);
DataInputStream inFromServer = new DataInputStream(clientSocket.getInputStream());
// O problema esta aqui :(
System.out.println(""+inFromServer.readInt());
clientSocket.close();
} catch (SocketTimeoutException ex) {
System.out.println("Limite excedido");
} catch (ConnectException ex) {
System.out.println("Porta fechada");
} catch (IOException e) {
System.out.println("Nao conecta");
}
}
O problema esta nessa linha:
Pq tipo se não conectar atinge o limite de tempo pq como não conecta nao tem como ele receber nada da máquina, mas quando conecta ele fica preso nessa linha pois pelo que entendi a maquina não manda nenhuma mensagem pra ele, e ele fica la esperando mesmo com a porta aberta acaba atingindo o tempo limite e não tem como eu fazer a ação dizendo “Porta Aberta”.
Alguém sabe como posso corrigir isso, e se em Java tem uma classe melhor que não seja socket pra eu fazer isso?
Obrigado a todos!