zeek/spicy
GitHub: zeek/spicy
一个专为网络协议和文件格式设计的 C++ 解析器生成器,通过统一的领域特定语言描述文法,可快速生成高效解析代码并无缝集成 Zeek。
Stars: 288 | Forks: 44
# Spicy — 用于协议和文件格式的健壮解析器
## 概述
Spicy 是一个解析器生成器,可以轻松地为网络协议、文件格式等创建健壮的 C++ 解析器。Spicy 有点像“协议版的 yacc”,但它的功能远不止于此:它是一个一体化的系统,使开发者能够使用单一、统一的语言编写属性文法,以描述输入格式的语法和语义。可以将 Spicy 视为满足您所有解析需求的特定领域脚本语言。
Spicy 工具链将此类文法转换为高效的 C++ 解析代码,该代码向宿主应用程序公开 API,用于实例化解析器、向其输入数据以及检索结果。在运行时,解析过程在任意大小的输入流上完全增量地进行——并且可能高度并发。Spicy 解析器的编译可以在启动时通过 C++ 编译器即时 (JIT) 完成;或者通过创建预编译的共享库进行提前 (AOT) 编译;亦或是生成可链接到您的应用程序中的 C++ 代码。
Spicy 附带一个 [Zeek 插件](https://github.com/zeek/zeek/tree/master/src/spicy),无需编写任何 C++ 代码即可向 [Zeek](https://www.zeek.org) 添加新的协议和文件分析器。您只需定义文法,指定要生成的 Zeek 事件,剩下的工作由 Spicy 完成。还有一个 [Zeek 分析器](https://github.com/zeek/spicy-analyzers)包,为 Zeek 提供了几个新的基于 Spicy 的分析器。
请参阅我们的[示例文法集合](https://docs.zeek.org/projects/spicy/en/latest/programming/examples.html#examples),以了解 Spicy 的样貌。
## 安装
我们为多个 Linux 平台提供预构建的 Spicy 二进制文件,以及用于在 macOS 上安装的 Homebrew formula(和二进制文件)。您也可以从 Docker Hub 拉取 Docker 镜像,或利用包含的几个 Dockerfile 之一作为起点。当然,您也可以直接从源代码构建 Spicy。有关这些选项的更多信息,请参阅[安装说明](https://docs.zeek.org/projects/spicy/en/latest/installation.html)。
## 文档
请阅读 [Spicy 手册](https://docs.zeek.org/projects/spicy),其中包含以下部分:
* [安装](https://docs.zeek.org/projects/spicy/en/latest/installation.html)
* [入门](https://docs.zeek.org/projects/spicy/en/latest/getting-started.html)
* [常见问题解答](https://docs.zeek.org/projects/spicy/en/latest/faq.html)
* [教程:一个真实的分析器](https://docs.zeek.org/projects/spicy/en/latest/tutorial/index.html)
* [Spicy 编程](https://docs.zeek.org/projects/spicy/en/latest/programming/index.html)
* [工具链](https://docs.zeek.org/projects/spicy/en/latest/toolchain.html)
* [Zeek 集成](https://docs.zeek.org/projects/spicy/en/latest/zeek.html)
* [自定义宿主应用程序](https://docs.zeek.org/projects/spicy/en/latest/host-applications.html)
* [发行说明](https://docs.zeek.org/projects/spicy/en/latest/release-notes.html)
* [开发者手册](https://docs.zeek.org/projects/spicy/en/latest/development/index.html)
## 联系我们
在使用 Spicy 时遇到问题?有改进 Spicy 的想法?我们期待您的反馈!
- 在 GitHub [问题追踪器](https://github.com/zeek/spicy/issues)上报告问题。
- 在 [Zeek 的 Slack](https://zeek.org/slack) 的 `#spicy` 频道提问。
- 查看 [Zeek 社区](https://community.zeek.org)并在 [Spicy 标签](https://community.zeek.org/c/spicy/)下讨论 Spicy。
## 许可证
Spicy 是开源的,并在 BSD 许可证下发布,只要保留许可证头部,该许可证几乎允许无限制的使用。您完全拥有 Spicy 根据您的文法生成的任何解析器。
## 历史
Spicy 最初是在 [国际计算机科学研究所](http://www.icsi.berkeley.edu) 作为研究原型开发的,资金来自 [美国国家科学基金会](https://www.nsf.gov)。从那时起,Spicy 已经由 [Corelight](https://www.corelight.com) 从头重建,并将新的实现贡献给了 Zeek 项目。
| Stable | Development | |
|---|---|---|
| Documentation | Spicy Manual | |
| Changelog | Release Notes | CHANGES |
| Build status |
|
|
Spicy 是一个解析器生成器,可以轻松地为网络协议、文件格式等创建健壮的 C++ 解析器。Spicy 有点像“协议版的 yacc”,但它的功能远不止于此:它是一个一体化的系统,使开发者能够使用单一、统一的语言编写属性文法,以描述输入格式的语法和语义。可以将 Spicy 视为满足您所有解析需求的特定领域脚本语言。
Spicy 工具链将此类文法转换为高效的 C++ 解析代码,该代码向宿主应用程序公开 API,用于实例化解析器、向其输入数据以及检索结果。在运行时,解析过程在任意大小的输入流上完全增量地进行——并且可能高度并发。Spicy 解析器的编译可以在启动时通过 C++ 编译器即时 (JIT) 完成;或者通过创建预编译的共享库进行提前 (AOT) 编译;亦或是生成可链接到您的应用程序中的 C++ 代码。
Spicy 附带一个 [Zeek 插件](https://github.com/zeek/zeek/tree/master/src/spicy),无需编写任何 C++ 代码即可向 [Zeek](https://www.zeek.org) 添加新的协议和文件分析器。您只需定义文法,指定要生成的 Zeek 事件,剩下的工作由 Spicy 完成。还有一个 [Zeek 分析器](https://github.com/zeek/spicy-analyzers)包,为 Zeek 提供了几个新的基于 Spicy 的分析器。
请参阅我们的[示例文法集合](https://docs.zeek.org/projects/spicy/en/latest/programming/examples.html#examples),以了解 Spicy 的样貌。
## 安装
我们为多个 Linux 平台提供预构建的 Spicy 二进制文件,以及用于在 macOS 上安装的 Homebrew formula(和二进制文件)。您也可以从 Docker Hub 拉取 Docker 镜像,或利用包含的几个 Dockerfile 之一作为起点。当然,您也可以直接从源代码构建 Spicy。有关这些选项的更多信息,请参阅[安装说明](https://docs.zeek.org/projects/spicy/en/latest/installation.html)。
## 文档
请阅读 [Spicy 手册](https://docs.zeek.org/projects/spicy),其中包含以下部分:
* [安装](https://docs.zeek.org/projects/spicy/en/latest/installation.html)
* [入门](https://docs.zeek.org/projects/spicy/en/latest/getting-started.html)
* [常见问题解答](https://docs.zeek.org/projects/spicy/en/latest/faq.html)
* [教程:一个真实的分析器](https://docs.zeek.org/projects/spicy/en/latest/tutorial/index.html)
* [Spicy 编程](https://docs.zeek.org/projects/spicy/en/latest/programming/index.html)
* [工具链](https://docs.zeek.org/projects/spicy/en/latest/toolchain.html)
* [Zeek 集成](https://docs.zeek.org/projects/spicy/en/latest/zeek.html)
* [自定义宿主应用程序](https://docs.zeek.org/projects/spicy/en/latest/host-applications.html)
* [发行说明](https://docs.zeek.org/projects/spicy/en/latest/release-notes.html)
* [开发者手册](https://docs.zeek.org/projects/spicy/en/latest/development/index.html)
## 联系我们
在使用 Spicy 时遇到问题?有改进 Spicy 的想法?我们期待您的反馈!
- 在 GitHub [问题追踪器](https://github.com/zeek/spicy/issues)上报告问题。
- 在 [Zeek 的 Slack](https://zeek.org/slack) 的 `#spicy` 频道提问。
- 查看 [Zeek 社区](https://community.zeek.org)并在 [Spicy 标签](https://community.zeek.org/c/spicy/)下讨论 Spicy。
## 许可证
Spicy 是开源的,并在 BSD 许可证下发布,只要保留许可证头部,该许可证几乎允许无限制的使用。您完全拥有 Spicy 根据您的文法生成的任何解析器。
## 历史
Spicy 最初是在 [国际计算机科学研究所](http://www.icsi.berkeley.edu) 作为研究原型开发的,资金来自 [美国国家科学基金会](https://www.nsf.gov)。从那时起,Spicy 已经由 [Corelight](https://www.corelight.com) 从头重建,并将新的实现贡献给了 Zeek 项目。标签:Bash脚本, C++代码生成, DNS枚举, Spicy语言, Zeek集成, 二进制发布, 云安全监控, 增量解析, 并发解析, 开源工具, 文件格式解析, 流数据处理, 编译器技术, 网络协议分析, 网络安全工具, 解析器生成器, 语法与语义, 语法分析器, 请求拦截, 静态分析, 领域特定语言, 高性能解析