寻找一个数据包描述语言(最好有C#实现)

9
我正在开发一个特殊用途的网络工具,其中包含一些数据包嗅探和解码功能。我正在寻找可以协助解析/解码任意数据包格式的语言。理想情况下,解决方案应基于开放标准。虽然SO上有相关问题,但大多数涉及数据包嗅探的完整生命周期(我不太关心捕获,因为有其他库可以很好地完成)。
总的来说,我要寻找一种语言和支持框架,用于声明式定义数据包格式和相应的运行时解码。由于这个问题可以推广到任何非网络二进制数据,因此解决这个问题的方案也在范围内。我有点惊讶,目前没有成熟且稳健的标准存在(至少我没有找到)-尽管似乎有很多有趣但不太正确和接近的项目(见下文)。也许这说明了问题的难度,或者是需求缺乏。
举例来说,我对以下技术和思想感兴趣(无特定顺序):
  • Packet.Net - 能够将二进制数据包转换为结构体,但解析器都是硬编码的,似乎无法处理更复杂的格式。
  • DFDL - 我一直在关注这个项目,甚至一年前还参加了电话会议。标准似乎已经成熟,但实现似乎很有挑战性。虽然我不介意亲自动手,但我不确定我是否有足够的资源从头开始实现如此广泛的标准。
  • Network Monitor Open Source Parsers - 该项目使用类C语法来描述数据包,供Microsoft Network Monitor使用。它已定义许多数据包,并且语言似乎足够强大以支持复杂的结构。不幸的是,唯一的执行引擎实现在NetMon中,虽然该语言的语法可能被反向工程出来,但实现处理引擎可能非常困难。我还担心由于解析器语言与NetMon工具之间的显式联系,该语言存在非通用方面,可能不适合在其他工具中使用。
  • NetPDL - 这个项目看起来非常有趣,但开发似乎已经停滞了。还不太清楚如何在他们自己的环境之外利用执行引擎。
  • Wireshark Dissectors - 我考虑过包装/使用原生的Wireshark Dissectors来实现这个目的,但它们与Wireshark本身紧密相连。解析器也使用代码执行大部分解码操作,这与我想要的有点相反——我更喜欢一些更声明式的东西(尽管显然需要平衡,因为复杂的数据包结构通常需要切换和其他逻辑来确定最终的组成)。
  • BSDL - 一个类似于DFDL(见上文)的学术语言。有趣且朝着正确的方向发展,但除了几篇论文之外,似乎没有其他存在。

我并不一定在这里寻找完整的解决方案(虽然如果有人知道我没有涵盖的解决方案,那将是很好的)。我更感兴趣的是关于我指出的技术的评论或轶事,以及我没有考虑或涵盖的路线的指针或想法。

2个回答

0

Wireshark解析器框架非常强大。请在此处阅读描述 -

http://www.wireshark.org/docs/wsdg_html_chunked/ChapterDissection.html#ChDissectWorks

我曾经遇到过类似于你的问题,需要解决。对我来说,协议必须与实际传输介质无关(主要是udo或top),但在测试期间,它只能在内存ipc中进行。

因此,我使用protobuf以结构化的方式定义了一个协议 -

http://code.google.com/p/protobuf/

然后我自己定义了一个解析器,类似但不完全像这样 - http://code.google.com/p/protobuf-wireshark/

这样我就可以在测试时使用直接的内存分析解剖,而在传输时使用wireshark解剖。当然,在使用protobuf定义协议时,内存解析器和wireshark解析器之间有很多代码重用。


-2

尝试在Windows中使用Winsock2接口。在Windows XP(SP2之前)或Windows Server版本中,您在创建原始套接字、检查数据包内容等方面没有任何限制...


这样做没有回答问题的关键点。 - Dan Bryant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接