Wie erhalte ich die falsche Ethernet-frames und deaktivieren der CRC/FCS-calcul?
Generiere ich ein Datenverkehr zwischen zwei PCs mit Linux (durch senden von Ethernet-frames), das Ziel ist es, zu erfassen, sind einige Fehler-frames. Das problem ist, wenn die Phy-Schicht erkennt Fehler, die auf einem Rahmen (wenn das CRC-oder FCS ist nicht gültig) der Rahmen ist gesunken und ich kann nicht erhalten, es in mein Programm.
Sind die alle Weg zu erhalten, den falschen Rahmen, (deaktivieren Sie die Tropfen in die Phy-Schicht und dem empfangen einer Anzeige, die darauf hindeuten, dass dieser frame ist falsch, zum Beispiel) und wie kann ich konsultieren, der Statistik der NIC-Karte (Anzahl der Tropfen ...etc).
- Dies ist hängt von der Plattform. Sie brauchen, um irgendeine Art von Gerätetreiber ioctl () - Aufruf vorausgesetzt, der Treiber unterstützt das.
- Ja, ich bin traying, um einen Weg finden, dass das Gerät nicht fallen, die schlechte frames (liefern Ihnen und teilen Sie mir mit, dass Sie schlecht sind)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihnen nicht angeben, welches Betriebssystem, aber ich kann zumindest sprechen für Linux:
Kann es auf deinen kernel, Netzwerkkarte und Treiber sowie ethtool-Versionen.
Müssen wir sagen, der/das Treiber /hardware zu tun, zwei Dinge, die Sie nicht normalerweise tun:
1) führen Sie das FCS-Feld, bis die Netzwerk-stack. (Im Allgemeinen ist diese abgeschnitten wird, bevor Sie weitergegeben)
2) Nicht fallen-Pakete mit schlechten FCS Felder, stattdessen übergeben Sie als-ist
Gibt es zwei ethtool-Optionen zu erreichen jedes dieser:
Mit dieser, ich bin in der Lage, verwenden Sie wireshark oder tcpdump anzeigen FCS-Felder, selbst wenn diese nicht korrekt sind. (in meinem Fall habe ich einige Netzwerk-Gerät ersetzt, dass die Prüfsumme on-the-fly mit einem genauen Zeitstempel -, die bewirkt, dass die Pakete erscheinen 'schlecht', und ich benutze die oben wiederherstellen)
Nicht alle Karten diese umzusetzen! Sie können die oben ethtool-Optionen 'fest' off oder nicht auf Sie reagieren.
Bei 1G Geschwindigkeiten, die ich gesehen habe e1000-Karten gut funktionieren. Bei 10G bin ich noch finden, ein NIC, das dies tut, und muss sich darauf verlassen können komplexere Datenerfassung Karten.
Wieder, ich weiß nicht, was der minimale kernel/ethtool version Anforderungen sind, aber ich erinnere mich haveing ein upgrade einer CentOS-server, um es zu bekommen, um zu arbeiten.
Ich weiß auch, dass r8169 und e1000 Treiber/Karten kann es tun, aber nicht sprechen kann, für jede andere Kombination an alle.
Beachten Sie auch Sie nicht in der Lage zu erfassen, ausgehende FCS Werte auf der Maschine, die Sie versenden Sie, weil Sie haben sehr spät im Prozess (vielleicht) ausgelagert, um die Karte selbst), so wird nicht sichtbar sein, pcap.
Auf einem Linux-kernel 3.10.11, mit ethtool 3.10:
Dann:
Gibt mir:
können Sie ein
raw socket
mitsocket()
nennen. zum Beispiel der folgende Aufruf öffnet sich einraw TCP socket
:können Sie das Protokoll ändern, je nachdem, was Sie wollen und Sie können sicher sein, dass erhalten Sie jedes Paket.
Dem obigen code wird nur erhalten Sie ein capture des guten Pakete an, sobald das beschädigte Pakete gar nicht erst an OS und werden gelöscht, entweder beim einschalten die erste oder an die line-card-Treiber mit dem PC verbunden. Weitere Diskussion zu dem gleichen Thema finden Sie hier bei Wireshark-wiki-Seite