1 个不稳定版本
0.1.0 | 2023 年 6 月 16 日 |
---|
#2698 在 解析器实现
6,946 每月下载量
130KB
2K SLoC
pcap-file-tokio
是 pcap-file crate 的分支,修改以支持 tokio。
提供 Pcap 和 PcapNg 文件的解析器、读取器和写入器。
有关 Pcap 文件,请参阅 pcap 模块。
有关 PcapNg 文件,请参阅 pcapng 模块。
文档
https://docs.rs/pcap-file-tokio
安装
此 crate 位于 crates.io。将其添加到您的 Cargo.toml
[dependencies]
pcap-file-tokio = "2.0.0-rc1"
示例
PcapReader
use tokio::fs::File;
use pcap_file_tokio::pcap::PcapReader;
#[tokio::main]
async fn main() {
let file_in = File::open("test.pcap").await.expect("Error opening file");
let mut pcap_reader = PcapReader::new(file_in).await.unwrap();
// Read test.pcap
while let Some(pkt) = pcap_reader.next_packet().await {
//Check if there is no error
let pkt = pkt.unwrap();
//Do something
}
}
PcapNgReader
use tokio::fs::File;
use pcap_file_tokio::pcapng::PcapNgReader;
#[tokio::main]
async fn main() {
let file_in = File::open("test.pcapng").await.expect("Error opening file");
let mut pcapng_reader = PcapNgReader::new(file_in).await.unwrap();
// Read test.pcapng
while let Some(block) = pcapng_reader.next_block().await {
// Check if there is no error
let block = block.unwrap();
// Do something
}
}
模糊测试
目前有 4 个原始 harness 用于检查解析器在任何情况下都不会崩溃。要开始模糊测试,您必须使用以下命令安装 cargo-fuzz
:
$ cargo install cargo-fuzz
然后,在存储库的根目录中,您可以使用以下方式运行 harness:
$ cargo fuzz run pcap_reader
$ cargo fuzz run pcap_ng_reader
$ cargo fuzz run pcap_parser
$ cargo fuzz run pcap_ng_parser
请注意,libfuzzer 默认只使用一个核心,因此您可以选择在不同的终端中运行所有 harness,或者您可以通过传递 -jobs
和 -workers
属性。更多信息可以在其文档中找到 这里。要获取更好的崩溃报告,请将以下内容添加到您的 rust 标志中:-Zsanitizer=address
。例如。
RUSTFLAGS="-Zsanitizer=address" cargo fuzz run pcap_reader
许可证
MIT 许可
免责声明
为了测试库,我使用了由 hadrielk 提供的出色的 PcapNg 测试套件。
依赖关系
~2.7–4.5MB
~73K SLoC