2009-04-06 17 views

Respuesta

4

primer lugar, deshabilite la suma de comprobación de su tarjeta ethernet:

sudo ethtool -K eth1 tx off 

A continuación, envía las tramas corruptas de pitón:

#!/usr/bin/env python 

from socket import * 

# 
# Ethernet Frame: 
# [ 
# [ Destination address, 6 bytes ] 
# [ Source address, 6 bytes  ] 
# [ Ethertype, 2 bytes   ] 
# [ Payload, 40 to 1500 bytes ] 
# [ 32 bit CRC chcksum, 4 bytes ] 
# ] 
# 

s = socket(AF_PACKET, SOCK_RAW) 
s.bind(("eth1", 0)) 
src_addr = "\x01\x02\x03\x04\x05\x06" 
dst_addr = "\x01\x02\x03\x04\x05\x06" 
payload = ("["*30)+"PAYLOAD"+("]"*30) 
checksum = "\x00\x00\x00\x00" 
ethertype = "\x08\x01" 
s.send(dst_addr+src_addr+ethertype+payload+checksum) 

Ver A similar question

1

El programa no funcionó según lo previsto para generar errores de FCS.

El controlador de red agregó la suma de comprobación correcta al final del marco generado de nuevo. Por supuesto, es bastante posible que la solución funcione para algunas tarjetas, pero estoy seguro que no con ninguna de Intel. (También funciona sin cambios ethtool para mí.)

Con al menos una tarjeta de red Intel e1000e necesita un pequeño cambio al código anterior: Agregue la siguiente línea después de "s = socket (AF_PACKET, SOCK_RAW)" :

s.setsockopt(SOL_SOCKET,43,1) 

Este decirle al conductor del NIC para utilizar la opción "SO_NOFCS" se define en socket.h y enviar la trama a cabo sin calcular y añadir el FCS.

Usted también podría estar interesado en los siguientes C-Programm, que no me muestran cómo hacerlo: http://markmail.org/thread/eoquixklsjgvvaom

pero tenga en cuenta que el programa no funcionará en los últimos núcleos sin un pequeño cambio. El SOL_SOCKET parece haber cambiado la ID numérica de 42 a 43 en algún momento del pasado.

De acuerdo con el autor original, la característica debe estar disponible para al menos los siguientes controladores: e100, e1000 y e1000e. Un rápido grep en las fuentes del kernel de 3.16.0 indica que ixgbe igb e i40e también deberían funcionar. Si no está utilizando ninguna de estas tarjetas, esta opción de socket probablemente no estará disponible.

Cuestiones relacionadas