0.1.0 |
|
---|
#5 in #nailgun
2KB
nailgun
nailgun
是一个使用 trust-dns-proto
和 tokio
编写的 Rust 语言 DNS 性能测试客户端。欢迎提交 PR、问题和评论!
nailgun
首先是一个兴趣爱好项目,它受到了 flamethrower 的启发并借鉴了一些其参数。默认情况下它是单线程的,但可以配置使用多个线程。你可以指定流量生成器的数量(使用 tcount
)和 tokio 工作线程的数量(使用 wcount
),nailgun
将启动 tcount * wcount
个生成器。大多数情况下,这并不是必要的,因为一个并发生成器和单个工作线程已经足够。针对配置为立即返回 NXDOMAIN
的本地 dnsdist
实例进行测试(是的,这不是一个真实世界的基准测试),nailgun
可以在 1 个工作线程和生成器的情况下超过 250K QPS。
nailgun
使用 tracing
进行日志记录,因此可以使用 RUST_LOG
来控制日志输出。
特性
速率限制
您可以使用 -Q
指定特定的 QPS,这允许您设置一个期望的 QPS 速率,该速率将分配给所有发送者。
输出
--output
允许您指定不同的日志格式,由 tracing
提供。“pretty”、“json”和“debug”目前受支持,“pretty”是默认选项。您可以使用 RUST_LOG
来过滤输出(例如,RUST_LOG="naildns=trace"
只会从 naildns
二进制文件打印跟踪级别的信息)。默认情况下,nailgun
使用 stdout,但如果有 -o
标志和路径,则将记录到文件。完成运行后,还会在无跟踪的情况下打印到 stdout 的摘要。
无论这些选项如何,都会在运行结束后打印一个摘要到 stdout。
生成器
有多个生成器类型可用,使用-g
,默认是static
,但您也可以从文件生成查询,或者随机生成一部分。
DoH(新功能!)
nailgun
现在可以发送DoH消息了!
naildns dns.google -Q 2 -P doh
使用方法
naildns --help
默认情况下,nailgun将启动一个单线程的tokio运行时和1个流量生成器
naildns 0.0.0.0 -p 1953
这可以扩展
naildns 0.0.0.0 -p 1953 -w 16 -t 1
将在tokio运行时上启动16个操作系统线程(w/
wcount
),每个线程生成1个流量生成器(t/
tcount
),总计16*1=16个流量生成器。
注意如果您想快速搭建一个服务器进行测试,我一直在启动dnsdist
,并将其配置中的addAction(AllRule(), RCodeAction(3))
添加,以便所有DNS消息立即返回NXDomain
。
构建和安装
在本地构建
cargo build --release
naildns
二进制文件将位于target/release/naildns
从crates.io
本地
在本地安装
cargo install
待办事项
- 基于超时次数进行节流
- 第一批消息似乎总是设置QPS的两倍(例如,尝试
--limit-secs 5 -Q 10,最终将发送60个查询)
- 代码中还有一些待办事项清理需要处理
- 生成器的参数解析与flamethrower非常不同,因为clap似乎不支持以相同的方式解析它--希望找到解决方案
合并所有生成器的日志输出,而不是让它们单独运行- 更多生成器类型?
- 也许可以利用trustdns的其他部分来为有趣的查询类型提供选项。DOT?
DOH? - 建议?错误?