Suche nach einer Paketbeschreibungssprache (vorzugsweise mit einer C # -Implementierung) [geschlossen]

9

Ich bin dabei, ein spezielles Netzwerk-Tool mit einigen Funktionen zum Entschlüsseln und Decodieren von Paketen zu entwickeln. Ich suche nach Sprachen, die bei der Dissektion / Decodierung beliebiger Paketformate helfen sollen. Idealerweise sollte die Lösung auf offenen Standards basieren. Es gibt verwandte Fragen zu SO, aber die meisten befassen sich mit dem gesamten Lebenszyklus von Packet Sniffing (mir interessiert nicht so viel über die Erfassung, es gibt andere Bibliotheken, die das gut machen).

Im Allgemeinen suche ich eine Sprache und ein unterstützendes Framework für die deklarative Definition von Paketformaten und entsprechende Laufzeitdekodierung. Da dieses Problem auf alle binären Nicht-Netzwerkdaten verallgemeinert werden kann, würde eine Lösung, die dies für beliebige binäre Datenströme tut, ebenfalls im Geltungsbereich sein. Ich bin ein wenig überrascht, dass es keinen solchen Standard in einem reifen und robusten Zustand gibt (zumindest, den ich finden könnte) - obwohl es viele interessante, aber nicht ganz richtige und fast schon existierende Projekte zu geben scheint (siehe unten). Vielleicht spricht das für die Schwierigkeit des Problems oder vielleicht für eine mangelnde Nachfrage.

Ich interessiere mich zum Beispiel für Technologien und Ideen ähnlich der folgenden (in keiner bestimmten Reihenfolge):

  • Packet.Net - Führt die Konvertierung von binären Paketdarstellungen in Strukturen aus, aber die Dissektoren sind alle fest codiert und scheinen nicht in der Lage zu sein, komplexere Formate zu verarbeiten.
  • DFDL - Ich habe das eine Zeit lang verfolgt und nahm vor einem Jahr an Telekonferenzen teil. Der Standard scheint zu reifen, aber die Umsetzung scheint eine Herausforderung zu sein. Nicht, dass es mir etwas ausmachen würde, mir die Hände schmutzig zu machen, aber ich bin mir nicht sicher, ob ich die Ressourcen für dieses Projekt habe, um einen so umfassenden Standard von Grund auf für diesen Zweck zu implementieren.
  • Netzwerkmonitor-Open-Source-Parser - Dieses Projekt beschreibt Pakete mit einer C-ähnlichen Syntax zur Verwendung durch Microsoft Network Monitor. Es sind bereits viele Pakete definiert und die Sprache scheint robust genug, um komplexe Strukturen zu unterstützen. Unglücklicherweise ist die einzige Implementierung einer Ausführungs-Engine in NetMon, und während die Grammatik für die Sprache wahrscheinlich reverse-engineered sein könnte, könnte die Implementierung einer Verarbeitungs-Engine sehr schwierig sein. Ich bin auch besorgt, dass aufgrund der expliziten Verbindung zwischen der Parser-Sprache und dem NetMon-Tool nicht-allgemeine Aspekte der Sprache vorhanden sind, die sie für die Verwendung in anderen Tools unpassend machen würden.
  • NetPDL - Dieser sieht sehr interessant aus, aber die Entwicklung scheint nachgelassen zu haben. Es ist auch nicht ganz klar, wie man die Ausführungsengine außerhalb ihrer eigenen Umgebung nutzt.
  • Wireshark Dissectors - Ich habe darüber nachgedacht, native Wireshark Dissectors für diesen Zweck einzubinden / zu verwenden, aber sie sind ziemlich nah an Wireshark selbst gebunden. Die Dissektoren verwenden auch Code, um den Großteil der Decodierung durchzuführen, was ein bisschen entgegengesetzt zu dem ist, wonach ich suche - ich bevorzuge etwas, das ein bisschen deklarativer ist (obwohl offensichtlich ein Gleichgewicht besteht, da komplexe Paketstrukturen oft wechseln müssen) Logik, um das endgültige Make-up zu bestimmen).
  • BSDL - Eine akademische Sprache, die dem DFDL ähnelt (siehe oben). Interessant und in die richtige Richtung, aber außerhalb einiger Papiere scheint nichts anderes zu existieren.

Ich bin hier nicht unbedingt auf der Suche nach einer vollständigen Lösung (obwohl, wenn jemand von einem weiß, den ich nicht behandelt habe, wäre das großartig). Ich interessiere mich mehr für Kommentare oder Anekdoten über die Technologien, die ich oben angegeben habe, sowie für Hinweise oder Ideen für Routen, an die ich nicht gedacht oder nicht gedacht habe.

    
daveaglick 30.06.2011, 16:25
quelle

2 Antworten

0

Wireshark Dissector Framework ist sehr leistungsfähig. Bitte lesen Sie eine Beschreibung hier -

Ссылка

Ich musste ein ähnliches Problem lösen. Auch für mich musste das Protokoll agnostisch vom tatsächlichen Transitmedium sein (hauptsächlich wäre es udo oder top), aber während des Tests wäre es nur im Speicher ipc.

Also habe ich ein Protokoll mit Hilfe von protobuf -

strukturiert definiert

Ссылка

Und dann habe ich selbst einen Dissektor definiert, aber nicht genau wie - Ссылка

So konnte ich analysieren, indem ich die Dissektion direkt im Speicher analysierte, wenn ich mich im Test befand, und die Drahthaissektion, wenn ich am Draht war. Es gab eine Menge Code Wiederverwendung zwischen Memory Dissector und Wireshark Dissektor natürlich, wie das Protokoll wurde Agnostisch mit Protobuf definiert.

    
NiladriBose 17.09.2012 12:28
quelle
-1

Probieren Sie die Winsock2-Oberfläche in Windows aus. In Windows XP (vor SP2) oder Windows Server-Varianten haben Sie keine Einschränkungen, was das Erstellen von Raw-Sockets, das Überprüfen des Inhalts von Paketen usw. betrifft.

    
bleepzter 18.07.2011 18:34
quelle

Tags und Links