寻找一种包描述语言(最好用C#实现)

本文关键字:实现 语言 一种 包描述 寻找 描述 | 更新日期: 2023-09-27 18:00:52

我正在开发一种具有数据包嗅探和解码功能的专用网络工具。我正在寻找设计用于帮助解析/解码任意数据包格式的语言。理想情况下,解决方案应该基于开放标准。SO上有一些相关的问题,但大多数都涉及数据包嗅探的整个生命周期(我不太关心捕获,还有其他库做得很好(。

一般来说,我正在寻找一种语言和支持框架,用于数据包格式的解密定义和相应的运行时解码。因为这个问题可以推广到任何非网络二进制数据,所以对任意二进制流这样做的解决方案也在范围内。我有点惊讶,目前没有这样的标准处于成熟和稳健的状态(至少我能找到(——尽管似乎有很多有趣但不太正确的项目(见下文(。也许这说明了问题的困难,也可能说明了需求的缺乏。

举个例子,我对类似以下的技术和想法感兴趣(没有特别的顺序(:

  • Net-完成从二进制数据包表示转换为结构的工作,但解析器都是硬编码的,它似乎无法处理更复杂的格式
  • DFDL-我已经关注这个问题有一段时间了,甚至在一年左右前参加了电话会议。该标准似乎正在走向成熟,但实施起来似乎具有挑战性。我并不介意弄脏自己的手,但我不确定我是否有足够的资源在这个项目上从头开始实现如此广泛的标准
  • 网络监视器开源解析器-这个项目描述了使用类似C语法的数据包,供Microsoft网络监视器使用。它已经定义了很多数据包,而且该语言看起来足够健壮,可以支持复杂的结构。不幸的是,执行引擎的唯一实现是在NetMon中,虽然该语言的语法可能是逆向工程的,但实现处理引擎可能非常困难。我还担心,由于解析器语言和NetMon工具之间的明确联系,该语言存在一些非通用方面,不适合在其他工具中使用
  • NetPDL——这个看起来很有趣,但开发似乎停滞不前。也不完全清楚如何在自己的环境之外使用执行引擎
  • Wireshark解剖者-我曾考虑过为此目的包装/使用本地的Wireshark解剖者,但他们与Wireshark本身有着密切的联系。解析器还使用代码来执行大部分解码,这与我想要的有点相反——我更喜欢解密性更强的东西(尽管显然存在平衡,因为复杂的数据包结构通常需要切换和其他逻辑来确定最终组成(
  • BSDL——一种与DFDL概念相似的学术语言(见上文(。有趣而且方向正确,但除了几篇论文之外,似乎什么都不存在

我不一定在这里寻找一个完整的解决方案(尽管如果有人知道我没有涵盖的解决方案,那就太好了(。我更感兴趣的是关于我上面提到的技术的评论或轶事,以及我没有想到或涵盖的路线的指针或想法。

寻找一种包描述语言(最好用C#实现)

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解剖进行分析。当然,内存解析器和wireshark解析器之间有很多代码重用,因为协议是使用protobuf不可知地定义的。

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