Spicy — 协议和文件格式的强大解析器
概述
Spicy 是一个解析器生成器,可以轻松创建用于网络协议、文件格式等的强大 C++ 解析器。Spicy 有点像"用于协议的 yacc",但它远不止于此:它是一个全面的系统,使开发人员能够使用单一统一的语言编写属性语法,描述输入格式的语法和语义。可以将 Spicy 视为一种专门用于所有解析需求的领域特定脚本语言。
Spicy 工具链将这些语法转换为高效的 C++ 解析代码,为主机应用程序提供 API 以实例化解析器、输入数据并检索结果。在运行时,解析过程在任意大小的输入流上完全增量进行(并可能高度并发)。Spicy 解析器的编译可以在启动时即时进行(通过 C++ 编译器);或者提前进行,可以创建预编译的共享库,或者生成可以链接到应用程序中的 C++ 代码。
Spicy 附带一个 Zeek 插件,可以在不编写任何 C++ 代码的情况下向 Zeek 添加新的协议和文件分析器。您只需定义语法,指定要生成的 Zeek 事件,Spicy 会处理剩下的工作。还有一个 Zeek 分析器 包,为 Zeek 提供了几个新的基于 Spicy 的分析器。
查看我们的示例语法集合,了解 Spicy 的样子。
安装
我们为多个 Linux 平台提供预构建的 Spicy 二进制文件,以及用于在 macOS 上安装的 Homebrew 公式(和二进制文件)。您还可以从 Docker Hub 拉取 Docker 镜像,或使用几个包含的 Docker 文件之一作为起点。当然,您也可以直接从源代码构建 Spicy。有关这些选项的更多信息,请参阅安装说明。
文档
请阅读 Spicy 手册,其中包含以下章节:
联系我们
使用 Spicy 遇到困难?有改进 Spicy 的想法?我们很乐意听取您的意见!
-
在 GitHub 问题追踪器上报告问题。
-
在 Zeek 的 Slack 上询问
#spicy
频道。 -
要关注开发进展,请订阅提交邮件列表(可能会有很多消息!)。
许可证
Spicy 是开源的,采用 BSD 许可证发布,只要保留许可证头,就允许几乎不受限制地使用。您完全拥有 Spicy 从您的语法生成的任何解析器。
历史
Spicy 最初是作为一个研究原型在国际计算机科学研究所开发的,由美国国家科学基金会资助。此后,Corelight 从头开始重建了 Spicy,并将新的实现贡献给了 Zeek 项目。