2010-04-16 18 views
9

Como está definido (ver: http://www.freesoft.org/CIE/Course/Section4/8.htm), el encabezado TCP tiene un campo 'Opciones'. Hay un par de opciones ya definidas (ver: www.iana.org/assignments/tcp-parameters/) pero quiero crear las mías. (Para experimentar/investigar)¿Cómo escribir datos personalizados en el campo de opciones del encabezado del paquete TCP con Java?

¿Cómo puedo hacer que Java escriba (y luego lea) algunos datos personalizados en el campo de opciones?

Pregunta de bonificación: si no se puede hacer con Java. ¿Qué tipo de aplicación puede hacer esto? (No, realmente no tengo ganas de meterme con alguna implementación de pila TCP/IP a nivel kernel, quiero mantenerlo en la aplicación.)

¡Gracias!

+0

¿Qué sistema operativo está presente principalmente necesaria para ejecutar en? –

+0

bueno, lo mejor sería independiente del sistema operativo. de lo contrario: Linux (RHEL/CentOS) sería el principal – Matlabber

Respuesta

8

JNetPcap es una biblioteca que le permitirá cambiar encabezados de capas de bajo nivel, incluido TCP. http://jnetpcap.com/node/29

Aquí está un ejemplo rápido:

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 ... Modificando paquetes TCP ... huele malicioso – 100rabh

+0

¿Es ese un Hacker Quarterly ref que veo allí? Agradable si es así. – braden

+0

@braden sí lo es. – h3xStream

Cuestiones relacionadas