13 个版本 (3 个稳定版)
3.0.0-rc1 | 2024年1月9日 |
---|---|
2.0.0 | 2023年2月1日 |
2.0.0-rc1 | 2023年1月13日 |
1.1.1 | 2019年11月19日 |
0.7.0 | 2017年6月25日 |
#57 在 解析器实现
每月下载量:35,741
用于 21 个 crate(19 个直接使用)
150KB
3K SLoC
pcap-file
为 Pcap 和 PcapNg 文件提供解析器、读取器和写入器。
有关 Pcap 文件,请参阅 pcap 模块。
有关 PcapNg 文件,请参阅 pcapng 模块。
文档
安装
此 crate 位于 crates.io。将其添加到您的 Cargo.toml
[dependencies]
pcap-file = "3.0.0-rc1"
示例
PcapReader
use std::fs::File;
use pcap_file::pcap::PcapReader;
let file_in = File::open("test.pcap").expect("Error opening file");
let mut pcap_reader = PcapReader::new(file_in).unwrap();
// Read test.pcap
while let Some(pkt) = pcap_reader.next_packet() {
//Check if there is no error
let pkt = pkt.unwrap();
//Do something
}
PcapNgReader
use std::fs::File;
use pcap_file::pcapng::PcapNgReader;
let file_in = File::open("test.pcapng").expect("Error opening file");
let mut pcapng_reader = PcapNgReader::new(file_in).unwrap();
// Read test.pcapng
while let Some(block) = pcapng_reader.next_block() {
// 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 测试套件。
依赖项
~0.4–1MB
~21K SLoC