寻找包描述语言(最好使用AC#实现)

dav*_*ick 9 c# networking parsing packet

我正在开发一个具有一些数据包嗅探和解码功能的专用网络工具.我正在寻找旨在帮助解剖/解码任意数据包格式的语言.理想情况下,解决方案应基于开放标准.有关于SO的相关问题,但大多数涉及数据包嗅探的整个生命周期(我不太关心捕获,还有其他库可以做到这一点).

一般来说,我正在寻找的是一种语言和支持框架,用于分组格式的明确定义和相应的运行时解码.因为这个问题可以推广到任何非网络二进制数据,所以对任意二进制流执行此操作的解决方案也将在范围内.我有点惊讶,目前在成熟和稳健的状态下没有这样的标准(至少我能找到) - 虽然似乎有很多有趣但不完全正确且几乎有项目(见下文).也许这说明了问题的困难,或者可能是缺乏需求.

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

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

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

ble*_*ter -2

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