javacomelava
03-02-2010, 17:37
Salve
Ho un applicazione che per effettuare l'input utilizza il metodo readLine() di
BufferReader.
Il problema è che:
Se lancio l'applicazione da netBeans non ho alcun tipi di problema.
Se lancio l'applicazione da msdos(attraverso un jar che ho creato) il suddetto metodo comincia a darmi problemi.
Il problema è che readLine(),che dovrebbe aspettare che l'utente digiti qualcosa e prema INVIO,non aspetta l'input e va avanti con l'esecuzione del programma.
Ma poi perche se lancio da NetBeans tutto funziona a meraviglia e se lancio da dos tutto va a farsi fregare? Misteri della fede!
Qualcuno che riesce ad illuminarmi ?
if (sp != null) {
System.out.println("INIZIALIZAZIONE SCANNER PACCHETTI!");
Pcap pcap = Pcap.openLive(netDevice.getName(), sp.getQuantiByte(), sp.getFlag(), sp.getTimeout(), errors);
/* Controllo sulla variabile pcap: Se pcap=null allora si è verificato qualche problema nell'apertura del
* device.Gli errori saranno inseriti nel buffer apposito errors,e quindi stampati a schermo */
if (pcap == null) {
System.err.printf("ERRORE NELL'APERTURA DEL DEVICE: " + errors);
}
/* 'espressione' è una stringa contenente il filtro da applicare */
System.out.println("Per la sintassi sui filtri: *** http://www.tcpdump.org/tcpdump_man.html ***\n");
System.out.println("Inserisci il filto per la sessione di sniffing corrente:");
//BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
InputStreamReader input = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(input);
String espressione = new String();
try {
System.out.println("Specifica il filtro:\n");
espressione = reader.readLine();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Premi INVIO per procedere");
/* La classe PcapBpfProgram rappresenta un'istanza di un BARKLEY PACKET FILTER PROGRAM */
PcapBpfProgram program = new PcapBpfProgram();
int ottimizazione = 1; // 0 = false (Senza Ottimizazione)
int netmask = 0; // 0 = non specificata.Questa opzione serve a fare ricavare l'indirizzo di broadcast
/* Il metodo:
*
* compile(PcapBpfProgram program,String str,int optimize,int netmask);
*
* della classe Pcap.Il metodo compila un programma BPF,impostando un filtro,l'ottimizazione e la netmask.
*
* Compila un packet filter,convertendo l'espressione che rappresenta il filtro ad altro livello
* in un programma che può essere interpretato dal filto a livello kernel.(Definizione delle API).
*
*/
if (pcap.compile(program, espressione, ottimizazione, netmask) != Pcap.OK) {
System.err.println(pcap.getErr());
return;
}
/* La costante Ok è una costante di classe Pcap e vale 0 */
if (pcap.setFilter(program) != Pcap.OK) {
System.err.println(pcap.getErr());
return;
}
/* Avverte l'utente dell'avvenuta applicazione del filto */
System.out.println("Il filtro è stato applicato con successo: " + espressione);
JPacketHandler<String> handler = new JPacketHandler<String>() {
int c = 0;
public void nextPacket(JPacket pacchetto, String usr) {
System.out.println(usr + c + " *****");
System.out.println(pacchetto.toString());
c++;
}
};
/* Metodo che inizia il loop per lo sniffing dei pacchetti */
pcap.loop(sp.getNumPack(), handler, "***** PACCHETTO: "); // Esamina tanti pacchetti quanto vale 'numPack'
/* Chiude la sessione */
pcap.close();
}
Ho un applicazione che per effettuare l'input utilizza il metodo readLine() di
BufferReader.
Il problema è che:
Se lancio l'applicazione da netBeans non ho alcun tipi di problema.
Se lancio l'applicazione da msdos(attraverso un jar che ho creato) il suddetto metodo comincia a darmi problemi.
Il problema è che readLine(),che dovrebbe aspettare che l'utente digiti qualcosa e prema INVIO,non aspetta l'input e va avanti con l'esecuzione del programma.
Ma poi perche se lancio da NetBeans tutto funziona a meraviglia e se lancio da dos tutto va a farsi fregare? Misteri della fede!
Qualcuno che riesce ad illuminarmi ?
if (sp != null) {
System.out.println("INIZIALIZAZIONE SCANNER PACCHETTI!");
Pcap pcap = Pcap.openLive(netDevice.getName(), sp.getQuantiByte(), sp.getFlag(), sp.getTimeout(), errors);
/* Controllo sulla variabile pcap: Se pcap=null allora si è verificato qualche problema nell'apertura del
* device.Gli errori saranno inseriti nel buffer apposito errors,e quindi stampati a schermo */
if (pcap == null) {
System.err.printf("ERRORE NELL'APERTURA DEL DEVICE: " + errors);
}
/* 'espressione' è una stringa contenente il filtro da applicare */
System.out.println("Per la sintassi sui filtri: *** http://www.tcpdump.org/tcpdump_man.html ***\n");
System.out.println("Inserisci il filto per la sessione di sniffing corrente:");
//BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
InputStreamReader input = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(input);
String espressione = new String();
try {
System.out.println("Specifica il filtro:\n");
espressione = reader.readLine();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Premi INVIO per procedere");
/* La classe PcapBpfProgram rappresenta un'istanza di un BARKLEY PACKET FILTER PROGRAM */
PcapBpfProgram program = new PcapBpfProgram();
int ottimizazione = 1; // 0 = false (Senza Ottimizazione)
int netmask = 0; // 0 = non specificata.Questa opzione serve a fare ricavare l'indirizzo di broadcast
/* Il metodo:
*
* compile(PcapBpfProgram program,String str,int optimize,int netmask);
*
* della classe Pcap.Il metodo compila un programma BPF,impostando un filtro,l'ottimizazione e la netmask.
*
* Compila un packet filter,convertendo l'espressione che rappresenta il filtro ad altro livello
* in un programma che può essere interpretato dal filto a livello kernel.(Definizione delle API).
*
*/
if (pcap.compile(program, espressione, ottimizazione, netmask) != Pcap.OK) {
System.err.println(pcap.getErr());
return;
}
/* La costante Ok è una costante di classe Pcap e vale 0 */
if (pcap.setFilter(program) != Pcap.OK) {
System.err.println(pcap.getErr());
return;
}
/* Avverte l'utente dell'avvenuta applicazione del filto */
System.out.println("Il filtro è stato applicato con successo: " + espressione);
JPacketHandler<String> handler = new JPacketHandler<String>() {
int c = 0;
public void nextPacket(JPacket pacchetto, String usr) {
System.out.println(usr + c + " *****");
System.out.println(pacchetto.toString());
c++;
}
};
/* Metodo che inizia il loop per lo sniffing dei pacchetti */
pcap.loop(sp.getNumPack(), handler, "***** PACCHETTO: "); // Esamina tanti pacchetti quanto vale 'numPack'
/* Chiude la sessione */
pcap.close();
}