Frank1962
29-07-2007, 16:54
Sto cercando di implementare un semplice portscanner in java utilizzando la classe socket in modo da tenatare delle connessioni su tutte le porte di un determinato indirizzo: ho notato che passando direttamente al costruttore della classe socket l'indirizzo e la porta dove connettersi viene applicato un timeout di tentativo connessione abbastanza alto, quindi ho deciso di utilizzare il metodo connect il qualce permette di settare il timeout in ms.... ecco il codice del metodo:
public String Socket(String host,int port) {
try {
Socket a = new Socket();
System.out.println("eccomi1: "+port);
a.connect(new InetSocketAddress(host,port),10);
System.out.println("eccomi2");
StringBuffer risultato = new StringBuffer();
risultato.append("si ok è aperta");
return risultato.toString();
} catch(Throwable e) {
StringBuffer male = new StringBuffer();
male.append("no,no");
return null;
}
}
Il problema che si viene a creare è che chiamando questo metodo per tot porte noto che il flusso di controllo si ferma alla prima print "eccomi1" e in console vengono stampate tot "eccomi1" come se il programma avesse creato tot thread per ogni porta alla quale tantavo di connettermi.....
Com'è possibile un simile comportamento? ...alla fine le chiamate al metodo sono fatte con un semplice for che dovrebbe tantari di connettersi alle porta una alla volta e non tutte insieme:
Main() {
Port p = new Port();
for(int i=0;i<Math.pow(2, 16);i++) {
String s = p.Socket("192.168.1.1", i);
if(s!=null)
System.out.println("Port: " + i+" || "+s);
}
}
Qualcuno sa a cosa può essere dovuta questa anomalia?
public String Socket(String host,int port) {
try {
Socket a = new Socket();
System.out.println("eccomi1: "+port);
a.connect(new InetSocketAddress(host,port),10);
System.out.println("eccomi2");
StringBuffer risultato = new StringBuffer();
risultato.append("si ok è aperta");
return risultato.toString();
} catch(Throwable e) {
StringBuffer male = new StringBuffer();
male.append("no,no");
return null;
}
}
Il problema che si viene a creare è che chiamando questo metodo per tot porte noto che il flusso di controllo si ferma alla prima print "eccomi1" e in console vengono stampate tot "eccomi1" come se il programma avesse creato tot thread per ogni porta alla quale tantavo di connettermi.....
Com'è possibile un simile comportamento? ...alla fine le chiamate al metodo sono fatte con un semplice for che dovrebbe tantari di connettersi alle porta una alla volta e non tutte insieme:
Main() {
Port p = new Port();
for(int i=0;i<Math.pow(2, 16);i++) {
String s = p.Socket("192.168.1.1", i);
if(s!=null)
System.out.println("Port: " + i+" || "+s);
}
}
Qualcuno sa a cosa può essere dovuta questa anomalia?