Darker
28-10-2008, 05:18
Ciao a tutti :)
Sto studiando la classe jpcap di java. Ho scritto un codice molto semplice (preso pari pari dagli esempi scaricabili da QUA (http://netresearch.ics.uci.edu/kfujii/jpcap/doc/samples.html)) che cattura i pacchetti ICMP della mia scheda di rete virtuale e stampa a schermo il sequence number del pacchetto catturato.
A prima vista il codice funziona ma, appena il sequence number supera un certo valore, il numero che il programma "legge" diventa di 256 unità più piccolo di quanto dovrebbe...
Superato un secondo valore, il gap aumenta di altri 256 :eek:
E' chiaro che qualcosa non va. Al di là della risoluzione (è probabile che abbia fatto qualche errore di gioventù, non sono assolutamente pratico), vorrei capire la motivazione di questo comportamento anomalo.
Ecco il codice:
import jpcap.*;
import jpcap.PacketReceiver;
import jpcap.packet.Packet;
import jpcap.packet.ICMPPacket;
class Tcpdump implements PacketReceiver {
public void receivePacket(Packet packet) {
ICMPPacket icmp = (ICMPPacket) packet;
System.out.println(icmp.seq);
}
public static void main(String[] args) throws Exception {
NetworkInterface[] devices = JpcapCaptor.getDeviceList();
if(args.length<1){
System.out.println("usage: java Tcpdump <select a number from the following>");
for (int i = 0; i < devices.length; i++) {
System.out.println(i+" :"+devices[i].name + "(" + devices[i].description+")");
System.out.println(" data link:"+devices[i].datalink_name + "("
+ devices[i].datalink_description+")");
System.out.print(" MAC address:");
for (byte b : devices[i].mac_address)
System.out.print(Integer.toHexString(b&0xff) + ":");
System.out.println();
for (NetworkInterfaceAddress a : devices[i].addresses)
System.out.println(" address:"+a.address + " " + a.subnet + " "
+ a.broadcast);
}
}else{
JpcapCaptor jpcap = JpcapCaptor.openDevice(devices[Integer.parseInt(args[0])], 2000, false, 20);
jpcap.loopPacket(-1, new Tcpdump());
}
}
}
Grazie :D
Sto studiando la classe jpcap di java. Ho scritto un codice molto semplice (preso pari pari dagli esempi scaricabili da QUA (http://netresearch.ics.uci.edu/kfujii/jpcap/doc/samples.html)) che cattura i pacchetti ICMP della mia scheda di rete virtuale e stampa a schermo il sequence number del pacchetto catturato.
A prima vista il codice funziona ma, appena il sequence number supera un certo valore, il numero che il programma "legge" diventa di 256 unità più piccolo di quanto dovrebbe...
Superato un secondo valore, il gap aumenta di altri 256 :eek:
E' chiaro che qualcosa non va. Al di là della risoluzione (è probabile che abbia fatto qualche errore di gioventù, non sono assolutamente pratico), vorrei capire la motivazione di questo comportamento anomalo.
Ecco il codice:
import jpcap.*;
import jpcap.PacketReceiver;
import jpcap.packet.Packet;
import jpcap.packet.ICMPPacket;
class Tcpdump implements PacketReceiver {
public void receivePacket(Packet packet) {
ICMPPacket icmp = (ICMPPacket) packet;
System.out.println(icmp.seq);
}
public static void main(String[] args) throws Exception {
NetworkInterface[] devices = JpcapCaptor.getDeviceList();
if(args.length<1){
System.out.println("usage: java Tcpdump <select a number from the following>");
for (int i = 0; i < devices.length; i++) {
System.out.println(i+" :"+devices[i].name + "(" + devices[i].description+")");
System.out.println(" data link:"+devices[i].datalink_name + "("
+ devices[i].datalink_description+")");
System.out.print(" MAC address:");
for (byte b : devices[i].mac_address)
System.out.print(Integer.toHexString(b&0xff) + ":");
System.out.println();
for (NetworkInterfaceAddress a : devices[i].addresses)
System.out.println(" address:"+a.address + " " + a.subnet + " "
+ a.broadcast);
}
}else{
JpcapCaptor jpcap = JpcapCaptor.openDevice(devices[Integer.parseInt(args[0])], 2000, false, 20);
jpcap.loopPacket(-1, new Tcpdump());
}
}
}
Grazie :D