2011-06-13 13 views
14

Pregunta:

Estoy probando una sección de software de localización de fallas de cable, y me gustaría generar fallas de cable de manera confiable y reproducible en un cable cat5.¿Cómo generar de manera confiable errores de trama de Ethernet en el software?

Por el momento estoy usando un metro de cable no torcido, y moviendo el cable manualmente al lado de una fuente de alimentación, pero no puedo detectar ningún error en la aplicación (estoy leyendo los contadores de fallas de Ethernet fuera de la Ethernet ASIC.) No sé si esto se debe a que no se generaron fallas, o porque la detección del software/hardware es defectuosa.

¿Hay alguna manera de hacer esto en el software?

Me conformaría con escribir algo en un lenguaje de nivel superior, como Java o Python, y como último recurso estaría dispuesto a armarlo en C, pero preferiría no volver a escribir un controlador Ethernet puramente para arreglar un posible error.

[EDIT]: Quiero crear fallos del cable - no detectarlos.

[EDIT]: que haya transferido archivos de gran tamaño a través de FTP y SCP y sin problemas con el cable adulterado, y no veo errores que sube al inspeccionar el tráfico con Wireshark

[EDIT]: Vea también a similar question in python.

Solución:

Bueno, después de pasar más de un día luchando con C, esta es la solución pitón.

Primera desactivar suma de comprobación automática de la tarjeta ethernet:

sudo ethtool -K eth1 tx off 

A continuación, enviar su marco poco fiables 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) 

Quién dijo que tenía que ser complicado ...

PD: Me encanta Python.

+0

¿Estás tratando de detectar cómo el software responde a los paquetes erróneos? ¿O su software no reconoce esos paquetes mal formados y la razón por la cual están mal formados? –

+1

Presumiblemente, el "detector de fallas" está realizando verificaciones basadas en la suma de comprobación. Si está preparado para generar sus propios marcos Ethernet, ¿podría inyectar sumas de verificación erróneas? –

+1

@Oli - Sí, tienes razón. Es solo verificación basada en suma de comprobación. ¿Tiene algún software que me permita armar mis propios marcos de Ethernet? – brice

Respuesta

6

Si está trabajando en C, puede enviar una trama Ethernet cruda usando socket(AF_PACKET, SOCK_RAW, ...), y pasando un puntero a un búfer en bruto que se haya generado a sí mismo (por ejemplo, siguiendo el diseño de marcos en wikipedia).

Ha sido un largo tiempo desde que he hecho esto, así que no voy a intentar escribir un fragmento de código representante ...

+0

O bien, podrías hacerlo en Python ... – brice

Cuestiones relacionadas