Port Scanner

di il
2 risposte

Port Scanner

Salve a tutti ho questo programma un semplice port scanner volevo chiedere se possibbile chiarimenti su alcune righe di codice Grazie.

import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;

public class Main {

public static void main(String[] args) {
String ip = "localhost";
System.out.println("===Scanning " + ip + "===");
try {
ExecutorService es = Executors.newFixedThreadPool(100);
            int timeout = 200;

List<Future<ScannerResult>> list = new ArrayList<>();
for (int port = 1; port <= 65535; port++) {
list.add(portOpened(es, ip, port, timeout));
}
es.shutdown();
int openPorts = 0;
for (final Future<ScannerResult> f : list) {
if (f.get().isOpen()) {
openPorts++;
System.out.println(f.get().getPort());
}
}
System.out.println("L'indirizzo " + ip + " ha " + openPorts + " porte aperte");
} catch (InterruptedException | ExecutionException ex) {
System.out.println(ex.getMessage());
}
System.out.println("===END===");
}
public static Future<ScannerResult> portOpened(ExecutorService es, String ip, int port, int timeout) {
        return es.submit(() -> {
            try {
                Socket socket = new Socket();
                socket.connect(new InetSocketAddress(ip, port), timeout);
                socket.close();
                return new ScannerResult(port, true);
            } catch (Exception ex) {
                return new ScannerResult(port, false);
            }
        });

}
}

Ultima domanda come mai è necessario un timeout se ho gia un ciclo per gestire il programma

2 Risposte

  • Re: Port Scanner

    Ma quali sono le domande?

    Cosa c'entra il ciclo con il timeout?
  • Re: Port Scanner

    lorenzodev21 ha scritto:


    Salve a tutti ho questo programma un semplice port scanner
    Ok ma posta tutto il codice tra i tag code, altrimenti è illeggibile.

    lorenzodev21 ha scritto:


    volevo chiedere se possibbile chiarimenti su alcune righe di codice Grazie.
    Quali esattamente?

    lorenzodev21 ha scritto:


    Ultima domanda come mai è necessario un timeout se ho gia un ciclo per gestire il programma
    Perché l'altro connect (quello senza timeout) è equivalente a connect(endpoint, 0), dove 0 significa timeout "infinito". E ovviamente NON va bene. Mentre 200ms è accettabile ma forse un pelino poco. Sarebbe meglio es. 500ms o 1 sec. Considera che non puoi mettere un timeout bassissimo (es. 20ms) perché se la TUA connessione ha una latenza abbastanza alta, rischi di interpretare una latenza alta come "timeout".
Devi accedere o registrarti per scrivere nel forum
2 risposte