Ich bin mir nicht sicher, ob das überhaupt möglich ist, da dies in Hardware gehandhabt werden kann, aber ich muss einige Ethernet-Frames mit Fehlern senden. Ich möchte in der Lage sein, Runts, Jabber, Fehlausrichtung und schlechte FCS-Fehler zu erstellen. Ich arbeite in Python.Wie senden Sie einen Ethernet-Rahmen mit einer beschädigten FCS?
Antwort
Es kann in Hardware behandelt werden, ist aber nicht immer - und selbst wenn es ist, können Sie das ausschalten; siehe die ethtool Offload-Parameter.
In Bezug auf die vollständige Kontrolle über die Frames, die Sie erstellen - in PF_PACKET (für einen Ansatz) oder the tap driver (für einen anderen).
Hier ist ein Artikel auf using PF_PACKET to send hand-crafted frames from Python.
Zunächst deaktivieren Sie Ihre Ethernet-Karte des checksumming:
sudo ethtool -K eth1 tx off
Dann Sie die korrupten Frames aus Python senden:
#!/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)
Siehe A similar question
versuchen scapy für Python verwenden, gibt sind Beispiele, um Jumbo-Frames zu generieren, auch ein Runt-Frames. http://www.dirk-loss.de/scapy-doc/usage.html
Das Programm funktionierte nicht wie vorgesehen für mich, um FCS-Fehler zu generieren.
Der Netzwerktreiber hat die korrekte Prüfsumme am Ende des generierten Frames erneut hinzugefügt. Natürlich ist es durchaus möglich, dass die Lösung für einige Karten funktioniert, aber ich bin mir sicher, mit keinem von Intel. (Es funktioniert auch ohne ethtool Änderungen für mich.)
Mit mindestens einer Intel e1000e Netzwerkkarte müssen Sie eine kleine Änderung an den obigen Code: Fügen Sie die folgende Zeile nach "s = socket (AF_PACKET, SOCK_RAW)" :
s.setsockopt(SOL_SOCKET,43,1)
dem NIC-Treiber das sagt die „SO_NOFCS“ Option in socket.h definiert zu verwenden und den Rahmen, ohne die Berechnung und das Hinzufügen der FCS zu senden.
Sie können auch in dem folgende C-Programm interessiert sein, die ich zeigte, wie es geht: http://markmail.org/thread/eoquixklsjgvvaom
aber darüber im Klaren sein, dass das Programm nicht ohne eine kleine Änderung an den letzten Kernel arbeiten. Der SOL_SOCKET scheint die numerische ID in der Vergangenheit von 42 auf 43 geändert zu haben.
Laut dem ursprünglichen Autor sollte die Funktion für mindestens die folgenden Treiber verfügbar sein: e100, e1000 und e1000e. Ein schnelles grep in den Kernelquellen von 3.16.0 zeigt an, dass ixgbe igb und i40e ebenfalls funktionieren sollten. Wenn Sie keine dieser Karten verwenden, ist diese Socket-Option wahrscheinlich nicht verfügbar.
- 1. Reparieren einer beschädigten MP4-Videodatei
- 2. Wie behebe ich einen scheinbar beschädigten CMake Build?
- 3. WPF: Umgang mit beschädigten Font-Cache
- 4. Senden Sie einen Bildstrom mit ImageIO?
- 5. Gedankenexperiment mit __stdcall und beschädigten Stapel (C++)
- 6. Parsing Probleme in beschädigten json mit Python
- 7. Wie können Daten aus einer beschädigten SQLite3-Datenbank wiederhergestellt werden?
- 8. Wie erstelle ich eine FCS für PPP-Pakete?
- 9. Erhalten einer beschädigten Pipe beim Übergeben einer MySQL-Verbindung an einen Python-Thread
- 10. Ethernet FCS beim Capturen mit Wireshark unter Linux
- 11. Wie gehe ich mit beschädigten git-Objektdateien um?
- 12. Wie kann ich Dateien aus einem beschädigten .tar.gz-Archiv wiederherstellen?
- 13. Senden Sie 5MB Daten über einen Socket?
- 14. Senden einer benutzerdefinierten ArrayList durch einen Intent
- 15. Konstruieren Sie die ursprüngliche Zeichenfolge aus der beschädigten Zeichenfolge
- 16. Wie senden Sie ein Zertifikat mit einer HttpRequestMessage?
- 17. So senden Sie JSON-Daten an einen Server mit Java
- 18. Tool zum Wiederherstellen und Reparieren einer beschädigten * .MDB-Datenbank (Access)
- 19. Python - Erstellen von beschädigten Zip-Dateien mit ZipFile
- 20. Senden einer Nachricht über einen Socket mit gen_tcp: send/2
- 21. Wiederherstellen aller möglichen Informationen aus einer beschädigten h2-Datenbank-Datei
- 22. Das Herunterladen einer Torrent-Datei mit WebClient führt zu einer beschädigten Datei.
- 23. Korrigieren von beschädigten ZIP-Datei-Headern
- 24. Senden einer Datei an einen sinatra Backend
- 25. Senden Sie einen Tweet mit der Eingabetaste (Greasemonkey)
- 26. So senden Sie Daten an einen ASP.NET-Controller mit Angular2
- 27. C# senden Sie einen einfachen SSH-Befehl
- 28. Senden Sie javax.mail.internet.MimeMessage an einen Empfänger mit Nicht-ASCII-Namen?
- 29. Bitte senden Sie einen falschen Statuscode zurück
- 30. Senden Sie eine Anwendung auf einen bestimmten Bildschirm mit C#