#pcap #read-write #pcap-parser #pcapng #read #write #parse

pcap-file-tokio

一个用于使用 Tokio 异步解析、读取和写入 Pcap 和 PcapNg 的 crate

1 个不稳定版本

0.1.0 2023 年 6 月 16 日

#2698解析器实现

Download history 1742/week @ 2024-03-14 1952/week @ 2024-03-21 1342/week @ 2024-03-28 1737/week @ 2024-04-04 2401/week @ 2024-04-11 2555/week @ 2024-04-18 1871/week @ 2024-04-25 1701/week @ 2024-05-02 2015/week @ 2024-05-09 1923/week @ 2024-05-16 1793/week @ 2024-05-23 1680/week @ 2024-05-30 1657/week @ 2024-06-06 1793/week @ 2024-06-13 1880/week @ 2024-06-20 1283/week @ 2024-06-27

6,946 每月下载量

MIT 许可证

130KB
2K SLoC

pcap-file-tokio

pcap-file crate 的分支,修改以支持 tokio

提供 Pcap 和 PcapNg 文件的解析器、读取器和写入器。

有关 Pcap 文件,请参阅 pcap 模块。

有关 PcapNg 文件,请参阅 pcapng 模块。

Crates.io rustdoc Crates.io

文档

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