Java PortScan

[code]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());
}

}
[/code]

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.