Non sono sicuro che sia possibile anche perché potrebbe essere gestito nell'hardware, ma ho bisogno di inviare alcuni frame Ethernet con errori. Mi piacerebbe essere in grado di creare rottami, jabber, disallineamento e errori FCS errati. Sto lavorando in Python.Come si invia un frame Ethernet con un FCS corrotto?
risposta
può essere gestito nell'hardware, ma non sempre - e anche se lo è, è possibile disattivarlo; vedere i parametri di offload ethtool.
Per quanto riguarda il controllo totale dei frame creati, esaminare PF_PACKET (per un approccio) o the tap driver (per un altro).
Ecco un articolo su using PF_PACKET to send hand-crafted frames from Python.
In primo luogo, si disattiva checksum della scheda ethernet:
sudo ethtool -K eth1 tx off
Poi, si inviano i fotogrammi corrotti in pitone:
#!/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)
Vedi A similar question
provare a utilizzare Scapy per Python, ci sono esempi per generare jumbo frame, anche frame runt. http://www.dirk-loss.de/scapy-doc/usage.html
Il programma non ha funzionato come previsto per generare errori FCS.
Il driver di rete ha aggiunto nuovamente il checksum corretto alla fine del frame generato. Naturalmente è abbastanza probabile che la soluzione stia funzionando per alcune carte, ma sono sicuro che non con Intel. (Funziona anche senza modifiche ethtool per me.)
Con almeno una scheda di rete Intel e1000e è necessaria una piccola modifica al codice sopra: Aggiungere la seguente riga dopo "s = socket (AF_PACKET, SOCK_RAW)" :
s.setsockopt(SOL_SOCKET,43,1)
Questa dire al driver NIC per utilizzare l'opzione "SO_NOFCS" definito nella socket.h e inviare il telaio senza calcolare e aggiungere il FCS.
Potresti essere interessato al seguente C-programma, che ha Mostrami come farlo: http://markmail.org/thread/eoquixklsjgvvaom
ma essere consapevoli che il programma non funzionerà sui recenti kernel senza un piccolo cambiamento. Il SOL_SOCKET sembra aver cambiato l'ID numerico da 42 a 43 in qualche momento nel passato.
Secondo l'autore originale, la funzionalità dovrebbe essere disponibile per almeno i seguenti driver: e100, e1000 e e1000e. Un rapido grep nelle sorgenti del kernel di 3.16.0 indica che anche ixgbe igb e i40e dovrebbero funzionare. Se non si utilizza alcuna di queste schede, questa opzione del socket probabilmente non sarà disponibile.
- 1. Come determinare la lunghezza di un frame Ethernet II?
- 2. Linux: quando si inviano frame Ethernet, l'ethertype viene riscritto
- 3. Windows networking utilizzando solo frame Ethernet
- 4. Come creare un file "corrotto"
- 5. Come posso inviare un datagramma con un trailer Ethernet?
- 6. Come inviare frame Ethernet in Java senza stack TCP/IP
- 7. Scapy - Come sezionare un campo Trailer Ethernet
- 8. Come si ottiene l'indirizzo ethernet usando Java?
- 9. Invia frame video tramite socket
- 10. Calcolo Ethernet CRC32 - software vs risultato algoritmico
- 11. Come si invia un comando a un buffer specifico?
- 12. Come si invia un contenitore Spark a un cluster EMR?
- 13. Come inviare pacchetti Ethernet raw con C#?
- 14. Come si invia S-RET a Emacs in un terminale?
- 15. modifica Ethernet FSC in Scapy
- 16. Rails, come si invia un modulo con un link di testo?
- 17. in R Come copiare un frame di dati con un nome dinamico in un frame di dati con nome statico
- 18. Come posso recuperare i file da un archivio .tar.gz corrotto?
- 19. Come si invia un SMS da una shell?
- 20. Come recuperare da un file danneggiato corrotto in git
- 21. Come si verifica un attore Akka che invia un messaggio a un altro attore?
- 22. Invia una matrice con un HTTP Ottieni
- 23. Decodifica un frame websocket
- 24. jQuery, invia modulo con un pulsante
- 25. Invia due moduli con un pulsante
- 26. Come implementare un collegamento "invia a Kindle"?
- 27. Creare un frame di dati vuoto con indice da un altro frame di dati
- 28. F #: Come creare un Frame Deedle con origine dati SQL
- 29. Git: Invia a un repository remoto con un messaggio
- 30. Tracciare un frame di dati come tabella