2010-04-16 13 views
9

Come è definito (vedi: http://www.freesoft.org/CIE/Course/Section4/8.htm) l'intestazione TCP ha un campo 'Opzioni'. Ci sono un paio di opzioni già definite (vedi: www.iana.org/assignments/tcp-parameters/), ma voglio presentarmi da solo. (Per sperimentazione/ricerca.)Come scrivere dati personalizzati nel campo delle opzioni dell'intestazione del pacchetto TCP con Java?

Come posso ottenere Java per scrivere (e quindi leggere) alcuni dati personalizzati nel campo delle opzioni?

Domanda bonus: se non può essere eseguita con Java. che tipo di applicazione può fare questo? (No, non mi va davvero di scherzare con l'implementazione dello stack TCP/IP a livello kernel, voglio mantenerlo a livello di app.)

Grazie!

+0

Quale sistema operativo è presente in primo luogo necessario per l'esecuzione su? –

+0

beh, il migliore sarebbe indipendente dal sistema operativo. altrimenti: Linux (RHEL/CentOS) sarebbe primario – Matlabber

risposta

8

JNetPcap è una libreria che consente di modificare le intestazioni da livelli di basso livello compreso TCP. http://jnetpcap.com/node/29

Ecco un rapido esempio:

byte[] pktBytes = FormatUtils.toByteArray("0015c672234c90e6ba92661608004500002d358c4000800600000a000b050a090028c26e270fb8b256e3a2009f785018faf01f550000746573740a"); 
JMemoryPacket packet = new JMemoryPacket(pktBytes); 

packet.scan(Ethernet.ID); //Need to be done before doing any edits 

//Editing Ip layer 
Ip4 ip = packet.getHeader(new Ip4()); 
ip.source(new byte[] {2,6,0,0}); //Source Ip 2.6.0.0 
ip.destination(new byte[] {1,2,3,4}); //Dest Ip 1.2.3.4 

//Editing Tcp layer 
Tcp tcp = packet.getHeader(new Tcp()); 
tcp.destination(5555); //Port destination 5555 

if (pcap.sendPacket(packet) != Pcap.OK) { 
    System.err.println(pcap.getErr()); 
} 
+5

hmm ... Modifica pacchetti TCP ..smells dannoso – 100rabh

+0

È un ref Hacker Quarterly che vedo lì? Bello se così. – braden

+0

@braden si lo è. – h3xStream

Problemi correlati