30 个版本
0.8.2 | 2024 年 8 月 6 日 |
---|---|
0.8.1 | 2024 年 7 月 22 日 |
0.7.9 | 2024 年 5 月 30 日 |
0.7.2 | 2024 年 3 月 13 日 |
0.5.4 | 2021 年 11 月 29 日 |
#174 在 调试 中
1,806 个星标 & 38 个关注者
86KB
2K SLoC
Neqo,使用 Rust 实现的 QUIC
运行测试 HTTP/3 程序(neqo-client 和 neqo-server)
cargobuild
./target/debug/neqo-server '[::]:12345' --db./test-fixture/db
./target/debug/neqo-clienthttp://127.0.0.1:12345/
如果在运行时出现“无法加载动态库”错误,请执行以下操作
export LD_LIBRARY_PATH="$(dirname "$(find . -name libssl3.so -print | head -1)")"
在 macOS 上,执行
export DYLD_LIBRARY_PATH="$(dirname "$(find . -name libssl3.dylib -print | head -1)")"
使用独立的 NSS/NSPR 加速构建
您可以将 NSS (https://hg.mozilla.org/projects/nss) 和 NSPR (https://hg.mozilla.org/projects/nspr) 克隆到同一目录中,并导出一个名为 NSS_DIR
的环境变量,指向 NSS。这将导致构建使用现有的 NSS 检出。然而,为了运行依赖于 NSS 的任何东西,您需要将 $\[DY]LD\_LIBRARY\_PATH
设置为指向 $NSS_DIR/../dist/Debug/lib
。
注意:如果您没有单独编译 NSS,您需要安装 mercurial (hg)。NSS 构建需要 gyp,以及 ninja(或 ninja-build)。
调试 Neqo
QUIC 日志记录
使用以下命令启用 QLOG
$ mkdir "$logdir"
$ ./target/debug/neqo-server '[::]:12345' --db ./test-fixture/db --qlog-dir "$logdir"
$ ./target/debug/neqo-client 'https://[::]:12345/' --qlog-dir "$logdir"
您可以通过上传 QLOG 文件来使用 https://qvis.quictools.info/ 并可视化流量。
使用 SSLKEYLOGFILE 解密 Wireshark 日志
TODO:需要 Wireshark 的最小版本是多少? TODO:上面的链接可能不正确,协议现在称为 TLS 而不是 SSL?
有效地使用 RUST_LOG
如 env_logger 文档 中所述,可以使用环境变量 RUST_LOG
选择性地启用 Rust 代码中的日志消息。这对于 Neqo 的命令行工具以及 Neqo 被集成到 Gecko 中的情况都有效,尽管 Gecko 需要以调试模式构建。
一些示例
RUST_LOG=neqo_transport::dump ./mach run
仅列出发送和接收的 QUIC 数据包及其帧的内容。RUST_LOG=neqo_transport=debug,neqo_http3=trace,info ./mach run
为传输设置 'debug' 日志级别,为 http3 设置 'trace' 日志级别,并为所有其他 Rust 包设置 'info' 日志级别,包括 Neqo 和 Gecko 中使用的其他包。RUST_LOG=neqo=trace,error ./mach run
为以 "neqo" 开头的所有模块设置trace
日志级别,并将error
设置为其他无关 Rust 日志消息的最小日志级别。
在 Gecko 中尝试开发中的 Neqo 代码
在已签出的 Gecko 源代码副本中,将四个 Neqo 包在根 Cargo.toml
中的值设置为本地版本。例如,如果 Neqo 已签出到 /home/alice/git/neqo
,请向根 Cargo.toml
添加以下行。
[patch."https://github.com/mozilla/neqo"]
neqo-http3 = { path = "/home/alice/git/neqo/neqo-http3" }
neqo-transport = { path = "/home/alice/git/neqo/neqo-transport" }
neqo-common = { path = "/home/alice/git/neqo/neqo-common" }
neqo-qpack = { path = "/home/alice/git/neqo/neqo-qpack" }
neqo-crypto = { path = "/home/alice/git/neqo/neqo-crypto" }
然后运行以下命令
./mach vendor rust
使用 ./mach build
以通常方式编译 Gecko。
注意:使用与新 Neqo 代码一起使用的 Gecko 可能还需要进行更改(可能是对 neqo_glue
的更改),如果某些内容发生了变化。
依赖项
~1.1–1.9MB
~35K SLoC