Java PortScan

1 resposta
H
import java.net.Socket;
import javax.swing.JOptionPane;

public class PortScanTCP {

	public static void main(String args[]) {

		String server = JOptionPane.showInputDialog(null,"Digite o endereço do servidor a ser verificado.", "127.0.0.1");
		String limit  = JOptionPane.showInputDialog(null,"Digite a menor porta - e a última a serem percorridade(com - entre elas)","80-1024");

		String[] port = limit.split("-");
		int min = Integer.parseInt(port[0]);
		int max = Integer.parseInt(port[1]);

		StringBuffer portasEncontradas = new StringBuffer();

		for (int porta = min; porta <= max; porta++) {
			try {
				System.out.print("\rVerificando porta " + porta);
				Socket s = new Socket(server, porta);
				s.setTcpNoDelay(true);
				s.setSoTimeout(0);

				portasEncontradas.append(porta + "\n");
				s.close();
			} catch (Exception ex) {
			}
		}
		System.out.println("\nPortas TCP encontradas\n"	+ portasEncontradas.toString());
	}
}

1 Resposta

P

Pelo que vi este código deve ser extremamente lento quando há um firewall que bloqueia conexões na rota para o endereço a ser testado.

Como o setSoTimeout() está depois do new Socket(host,port), não terá efeito sobre o timout de conexão. Dependendo da configuração do seu ambiente, este timeout pode ser da ordem de minutos, o que torna um scan tarefa de horas, no pior caso.

Sugiro usar o construtor sem argumentos, setar o timeout e, depois disto, chamar o método connect.

Criado 15 de novembro de 2008
Ultima resposta 18 de nov. de 2008
Respostas 1
Participantes 2