• Stars
    star
    236
  • Rank 167,230 (Top 4 %)
  • Language
    C++
  • License
    Other
  • Created over 4 years ago
  • Updated about 1 month ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

C++ parser generator for dissecting protocols & files.

Spicy — Robust Parsers for Protocols & File Formats

Stable Development
Documentation Spicy Manual
Changelog Release Notes CHANGES
Build status Build status release Build status development

Overview

Spicy is a parser generator that makes it easy to create robust C++ parsers for network protocols, file formats, and more. Spicy is a bit like a "yacc for protocols", but it's much more than that: It's an all-in-one system enabling developers to write attributed grammars that describe both syntax and semantics of an input format using a single, unified language. Think of Spicy as a domain-specific scripting language for all your parsing needs.

The Spicy toolchain turns such grammars into efficient C++ parsing code that exposes an API to host applications for instantiating parsers, feeding them input, and retrieving their results. At runtime, parsing proceeds fully incrementally—and potentially highly concurrently—on input streams of arbitrary size. Compilation of Spicy parsers takes place either just-in-time at startup (through a C++ compiler); or ahead-of-time either by creating pre-compiled shared libraries, or by giving you generated C++ code that you can link into your application.

Spicy comes with a Zeek plugin that enables adding new protocol and file analyzers to Zeek without having to write any C++ code. You define the grammar, specify which Zeek events to generate, and Spicy takes care of the rest. There's also a Zeek analyzers package that provides Zeek with several new, Spicy-based analyzers.

See our collection of example grammars to get a sense of what Spicy looks like.

Installation

We provide pre-built Spicy binaries for several Linux platforms, as well as a Homebrew formula (and also binaries) for installation on macOS. You can also pull a Docker image from Docker Hub, or leverage one of several included Docker files as a starting point. Of course, you can also just build Spicy from source directly. See the installation instructions for more information on any of these options.

Documentation

Please read the Spicy Manual, which provides the following sections:

Getting in touch

Having trouble using Spicy? Have ideas how to make Spicy better? We'd like to hear from you!

License

Spicy is open source and released under a BSD license, which allows for pretty much unrestricted use as long as you leave the license header in place. You fully own any parsers that Spicy generates from your grammars.

History

Spicy was originally developed as a research prototype at the International Computer Science Institute with funding from the U.S. National Science Foundation. Since then, Spicy has been rebuilt from the ground up by Corelight, which has contributed the new implementation to the Zeek Project.

More Repositories

1

zeek

Zeek is a powerful network analysis framework that is much different from the typical IDS you may know.
C++
6,021
star
2

packet-bricks

A netmap-based packet layer for distributing and filtering traffic.
C
177
star
3

packages

The default package source of the Zeek Package Manager. Wrote a package? See the README for how to get it included.
130
star
4

zeek-agent

This project is no longer maintained. There's a successor at https://github.com/zeek/zeek-agent-v2
C++
125
star
5

zeek-osquery

Bro/Zeek integration with osquery
96
star
6

zeek-docker

Docker files for building Zeek.
Dockerfile
85
star
7

binpac

High level language for describing protocol parsers.
C++
68
star
8

bro-scripts

Misc. Bro scripts
Bro
65
star
9

broker

Zeek's Messaging Library
C++
63
star
10

zeek-agent-v2

Open source endpoint agent providing host information to Zeek. [v2]
C++
58
star
11

zeekctl

Tool for managing Zeek deployments.
Python
53
star
12

bro-plugins

(OBSOLETE) Plugins for Bro
53
star
13

cheat-sheet

The Bro/Zeek language cheat sheet
49
star
14

zeek-docs

Documentation for Zeek
Zeek
48
star
15

cmake

CMake scripts used in Zeek
CMake
47
star
16

pysubnettree

A Python Module for CIDR Lookups
C++
46
star
17

package-manager

A package manager for Zeek
Python
42
star
18

time-machine

Time-Machine Dynamic Bulk Packet Recorder
C++
36
star
19

zeek-training

Zeek Training Materials/Products
Zeek
35
star
20

paraglob

A fairly quick data structure for matching a string against a large list of patterns.
C
34
star
21

zeek-af_packet-plugin

Plugin providing native AF_Packet support for Zeek.
C++
33
star
22

spicy-analyzers

Growing collection of Spicy-based protocol and file analyzers for Zeek
31
star
23

zeek-aux

Zeek Auxiliary Programs
Shell
26
star
24

trace-summary

Generates network traffic summaries.
Python
21
star
25

btest

A Generic Driver for Powerful System Tests
Python
20
star
26

zeek-netcontrol

Connectors for the Zeek NetControl framework
Python
19
star
27

zeek-sublime

Zeek scripting language highlighting/support for Sublime Text
Zeek
18
star
28

try-zeek

Code for try.zeek.org.
JavaScript
18
star
29

bro-live

Bro Live! A Bro training/learning environment.
Groff
14
star
30

zeek-agent-framework

This project is no longer maintained. There's a successor at https://github.com/zeek-packages/zeek-agent-v2
Zeek
14
star
31

broccoli-python

(DEPRECATED) Python bindings for Broccoli
Python
13
star
32

capstats

A tool to get some NIC statistics.
C++
12
star
33

spicy-ldap

LDAP analyzer
Zeek
10
star
34

zeekscript

A toolchain to parse, analyze, and format Zeek scripts
Python
9
star
35

vim-zeek

Vim syntax highlighting for the Zeek scripting language (.zeek and .bro files)
Vim Script
7
star
36

broccoli

(DEPRECATED) Bro Client Communications Library
C
6
star
37

spicy-plugin

Spicy plugin for Zeek
C++
6
star
38

bromagic

(OBSOLETE) Custom libmagic database for Bro
TeX
5
star
39

zeek-netmap

Native Netmap Packet IOSource for Zeek
C++
5
star
40

zeek-benchmarker

Python
4
star
41

bifcl

Built-In-Function (BIF) Compiler/Generator for Zeek
Yacc
4
star
42

zeek-3rdparty

Third-party code used in Zeek.
C
4
star
43

zeek-client

Experimental implementation of Zeek's future cluster management client
Python
4
star
44

zeek-archiver

A Zeek log archival service
C++
3
star
45

zeek-demo

Go
3
star
46

zeek-pkg-web

Web viewer for packages maintained by the Zeek Package Manager, e.g. https://packages.zeek.org
PHP
3
star
47

package-website

New version of packages website
Python
3
star
48

spicy-http

Spicy-based analyzer for the HTTP protocol
CMake
3
star
49

broccoli-ruby

(DEPRECATED) Ruby bindings for Broccoli
Ruby
3
star
50

tree-sitter-zeek

A tree-sitter grammar for the Zeek scripting language
JavaScript
3
star
51

zeek-testing

Test baselines for Zeek.
Makefile
3
star
52

package-template

A Zeek package template for use with the zkg package manager
Python
3
star
53

action-zkg-install

A GitHub Action for testing and installing Zeek packages
Shell
2
star
54

emacs-zeek-mode

An Emacs major mode for editing Zeek scripts
Emacs Lisp
2
star
55

brogments

A Pygments lexer for Bro/Zeek scripts
Python
2
star
56

zeek-package-ci

Python
2
star
57

zeek-testing-cluster

External testsuite for the Zeek Cluster Controller
Shell
1
star
58

spicy-png

Spicy-based analyzer for the PNG file format
CMake
1
star
59

spicy-aux

Auxiliary development support for Spicy
Shell
1
star
60

spicy-dhcp

Spicy-based analyzer for the DHCP protocol
CMake
1
star
61

spicy-zip

Spicy-based analyzer for the ZIP file format
Zeek
1
star
62

spicy-pe

Spicy-based analyzer for the Portable Executable (PE) image format
Zeek
1
star
63

broccoli-perl

(DEPRECATED) Perl bindings for Broccoli
Perl
1
star
64

spicy-dns

Spicy-based analyzer for the DNS protocol
CMake
1
star
65

hello-world

A "hello world" Zeek package
Shell
1
star
66

gen-zam

A templator for the Zeek Abstract Machine
C++
1
star
67

website

Issue tracking for zeek.org
1
star
68

tree-sitter-zeek-src

Generated sources for https://github.com/zeek/tree-sitter-zeek
C
1
star
69

homebrew-zeek

Homebrew tap for Zeek subprojects
Ruby
1
star
70

spicy-tftp

Zeek package providing a Spicy-based TFTP analyzer
Zeek
1
star