No estoy seguro de si esto es posible, ya que esto podría manejarse en hardware, pero necesito enviar algunas tramas Ethernet con errores en ellas. Me gustaría poder crear runts, jabber, desalineación y errores FCS incorrectos. Estoy trabajando en Python.¿Cómo se envía una trama Ethernet con un FCS corrupto?
Respuesta
puede puede manejarse en hardware, pero no siempre es así, e incluso si lo es, puede apagarlo; ver los ethtool parámetros de descarga.
Con respecto a obtener un control total sobre los marcos que cree - consulte PF_PACKET (para un enfoque) o the tap driver (para otro).
Aquí hay un artículo en using PF_PACKET to send hand-crafted frames from Python.
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)
trate de usar scapy para Python, hay son ejemplos para generar marcos jumbo, también marcos enrutados. http://www.dirk-loss.de/scapy-doc/usage.html
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.
- 1. ¿Cómo se determina la longitud de una trama Ethernet II?
- 2. ¿Cómo se envía el paquete de ethernet sin procesar con C#?
- 3. Cómo crear un archivo "corrupto"
- 4. 802.11 FCS (CRC32)
- 5. cómo se envía html con restify
- 6. ¿Cómo generar de manera confiable errores de trama de Ethernet en el software?
- 7. ¿cómo se envía una solicitud SOAP?
- 8. ¿Cómo se envía una solicitud con el verbo HTTP "ELIMINAR"?
- 9. ¿Cómo puedo enviar un datagrama con un tráiler de Ethernet?
- 10. Interfaz Android con conexión Ethernet
- 11. ¿Cómo restaurar un repositorio de git corrupto?
- 12. ¿Por qué Java no se envía con un CopyOnWriteMap?
- 13. Comprimir archivos con javascript - archivo corrupto
- 14. VS corrupto archivo .sln?
- 15. Árbol de git corrupto?
- 16. ¿Cómo se obtiene la dirección de ethernet usando Java?
- 17. ¿Cómo se envía C# con el servidor SMTP de Gmail?
- 18. ¿Cómo se envía S-RET a Emacs en un terminal?
- 19. ¿Cómo se envía una lista desplegable en asp.net mvc
- 20. Marcos Ethernet sin procesar con Winsock
- 21. ¿Cómo marcar un punto en una trama de MATLAB?
- 22. ¿Cómo se envía una POST usando WizTools Rest Client?
- 23. ¿Cómo comprobar si un formulario se envía mediante javascript?
- 24. iTextSharp está produciendo un PDF corrupto
- 25. BadPaddingException: pad block corrupto
- 26. Cómo hacer una trama 4d usando Python con matplotlib
- 27. envía un correo electrónico con el enlace
- 28. ¿Cómo se envía un byte HTTP usando NameValuePair?
- 29. ¿Cómo se envía un correo electrónico desde Windows Phone 7?
- 30. Cómo recuperarse de un archivo perdido corrupto en git