2011-05-24 12 views
6

Duplicar posible:
How to calculate a packet checksum without sending it?Cómo volver a calcular la suma de comprobación IP con Scapy?

he falsificado una IP de origen y la dirección MAC en un paquete capturado, pero ahora tengo que volver a calcular la suma de comprobación para que compruebe una vez su recibido (después de ser inyectado en la red, por supuesto). Realmente no quería implementar la suma de verificación, y estaba pensando que scapy podría hacer esto por mí. Leí que la función show2() debería recalcular la suma de comprobación, pero parece que no puedo hacer que funcione.

Entonces, ¿cómo puedo usar scapy para recalcular (y reemplazar) la suma de comprobación para un paquete capturado + falso?

Gracias!

+0

Además, si hay otra biblioteca de Python fácil de usar que funcione bien en esta situación, soy todo oídos (ojos). –

Respuesta

7

Como shown here, usted tiene que eliminar el atributo .chksum antes de llamar al método show2() de scapy

+1

Seleccioné esta respuesta porque la clave era que tenía que 'del' el campo chksum. Anteriormente estaba reconstruyendo manualmente el paquete con bytes nulos en el campo de suma de comprobación. Hacer eso y luego llamar a 'show2()' no recalculó la suma de comprobación. Eliminar el campo primero con 'del' proporciona el comportamiento correcto. –

3

Digamos, por motivo de la discusión que estamos procesar una cabecera IP y quieren volver a calcular la suma de comprobación después del salto siguiente:

>>> iph = IP(import_hexcap()) 
0000 4500 0064 000f 0000 fe01 3726 c0a8 0108 
0010 c0a8 030b 
>>> iph.ttl = iph.ttl - 1 
>>> del iph.chksum 
>>> iph.show2() 
###[ IP ]### 
version= 4L 
ihl= 5L 
tos= 0x0 
len= 100 
id= 15 
flags= 
frag= 0L 
ttl= 253 
proto= icmp 
chksum= 0x3826 
src= 192.168.1.8 
dst= 192.168.3.11 
options= 

El campo .chksum tiene su respuesta.

Cuestiones relacionadas