9个版本
0.2.0 | 2024年7月29日 |
---|---|
0.1.8 | 2024年4月30日 |
#2 in #positive
每月135次下载
1.5MB
3K SLoC
Poppy是一个提供布隆过滤器高效实现的Rust库。它还包括一个命令行实用工具(也称为poppy),允许用户轻松地创建具有所需容量和错误正率的过滤器。可以通过标准输入添加值到过滤器中,从而方便地将此工具用于管道工作流程。
Poppy确保与DCSO bloom软件使用的布隆过滤器格式兼容,但也提供了自己的布隆过滤器实现和格式。
常见问题解答
选择哪种格式?
这取决于你想要达到的目标。如果你想与DCSO工具和库兼容,你必须绝对选择DCSO格式。在任何其他情况下,我们建议使用Poppy格式(默认),因为它更健壮、更快,并提供了定制空间。两个格式和实现的比较可以在这篇博客文章中找到。默认情况下,库和CLI选择的是poppy格式。如果想要在创建过滤器时选择DCSO格式,则必须在CLI中使用poppy create --version 1
。
如何构建项目?
常规构建
cargo build --release --bins
使用MUSL(静态二进制文件)构建
# You can skip this step if you already have musl installed
rustup target add x86_64-unknown-linux-musl
# Build poppy with musl target
cargo build --release --target=x86_64-unknown-linux-musl --bins
如何在其他语言中使用Poppy?
在Python中
Poppy附带Python绑定,使用优秀的PyO3 crate。
请查看Poppy绑定以获取更多详细信息。
命令行界面
安装
为了安装poppy
命令行实用工具,需要运行以下命令:cargo install poppy-filters
另一种安装方法是克隆此仓库并使用cargo
从源代码编译。
使用方法
Usage: poppy [OPTIONS] <COMMAND>
Commands:
create Create a new bloom filter
insert Insert data into an existing bloom filter
check Checks entries against an existing bloom filter
bench Benchmark the bloom filter. If the bloom filter behaves in an unexpected way, the benchmark fails. Input data is read from stdin
show Show information about an existing bloom filter
help Print this message or the help of the given subcommand(s)
Options:
-v, --verbose Verbose output
-j, --jobs <JOBS> The number of jobs to use when parallelization is possible. For write operations the original filter is copied into the memory of each job so you can expect the memory of the whole process to be N times the size of the filter [default: 2]
-h, --help Print help
每个命令都有自己的参数和帮助信息。例如,要获取create
命令的帮助,请运行:poppy create help
。
示例
创建一个空的布隆过滤器
# creating a filter with a desired capacity `-c` and false positive probability `-p`
poppy create -c 1000 -p 0.001 /path/to/output/filter.pop
# showing information about the filter we just created
poppy show /path/to/output/filter.pop
将数据插入过滤器
可以在过滤器中通过两种方式插入数据,要么 从 stdin 读取,要么 从 文件 中读取。从 stdin 读取数据不能并行化,因此如果想在过滤器中插入大量数据并加快插入速度,必须从文件中插入(并使用 -j
选项设置要使用的 CPU 数量)。
# insertion from stdin
cat data-1.txt data-2.txt | poppy insert filter.pop
# we verify number of element in the filter
poppy show filter.pop
# insertion from files
poppy insert filter.pop data-1.txt data-2.txt
# we verify number of element in the filter
poppy show filter.pop
# insertion from several files in parallel
poppy -j 0 insert filter.pop data-1.txt data-2.txt
一个命令创建和插入
可以直接从一组数据中轻松创建过滤器。在这种情况下,过滤器的容量将设置为数据集中条目的数量。
# this creates a new filter saved in filter.pop with all entries (one per line)
# found in .txt files under the dataset directory using available CPUs (-j 0)
poppy -j 0 create -p 0.001 /path/to/output/filter.pop /path/to/dataset/*.txt
检查数据是否在过滤器中
检查操作与插入相同,可以是来自 stdin 或来自 文件(当需要利用并行化时)。默认情况下,当条目 在 过滤器中时,它将被打印到 stdout。
# check from stdin
cat data-1.txt data-2.txt | poppy check filter.pop
# check from files
poppy check filter.pop data-1.txt data-2.txt
# check from several files in parallel
poppy -j 0 check filter.pop data-1.txt data-2.txt
基准测试过滤器
基准测试过滤器是一个重要的步骤,因为它可以确保你得到的是你预期的结果,即假阳性概率。基准测试需要使用已经插入过滤器中的数据,然后随机更改条目并对其进行检查。
# run a benchmark against data known to be in the filter
cat data-1.txt data-2.txt | poppy bench filter.pop
资金
NGSOTI项目致力于培训下一代安全运营中心(SOC)操作员,重点关注网络安全的人为方面。它强调了为SOC操作员提供必要技能和开源工具来应对检测工程、事件响应和威胁情报分析等挑战的重要性。该项目涉及CIRCL、Restena、Tenzir和卢森堡大学等关键合作伙伴,旨在建立一个实际操作的基础设施以进行实践培训。这项倡议将学术课程与行业见解相结合,在网络安全范围中提供实践经验。
NGSOTI由数字欧洲计划(DEP)通过ECCC(欧洲网络安全能力网络和能力中心)共同资助。
依赖项
~8MB
~149K SLoC