5个版本 (1个稳定版)

1.0.0 2021年12月31日
0.3.0 2017年9月2日
0.2.2 2017年8月18日
0.2.1 2017年8月2日
0.2.0 2017年8月1日

#1150网络编程

Download history 65/week @ 2024-03-12 27/week @ 2024-03-19 47/week @ 2024-03-26 122/week @ 2024-04-02 61/week @ 2024-04-09 64/week @ 2024-04-16 76/week @ 2024-04-23 125/week @ 2024-04-30 27/week @ 2024-05-07 28/week @ 2024-05-14 24/week @ 2024-05-21 41/week @ 2024-05-28 41/week @ 2024-06-04 33/week @ 2024-06-11 121/week @ 2024-06-18 136/week @ 2024-06-25

每月337次下载
3 crate 中使用

MIT/Apache

36KB
707

RPCAP

一个用于读取和写入PCAP文件的纯Rust库。

完整API文档

use std::fs::File;
use std::io::{BufReader, BufWriter};
use rpcap::read::PcapReader;
use rpcap::write::{PcapWriter, WriteOptions};

// read a PCAP file
let infile = File::open("example.pcap").unwrap();
let reader = BufReader::new(infile);
let (file_opts, mut pcapr) = PcapReader::new(reader).unwrap();
println!("type of captured packets: {}", file_opts.linktype);
println!("maximum packet size: {}", file_opts.snaplen);

// create a new PCAP file
let outfile = File::create("copy.pcap").unwrap();
let writer = BufWriter::new(outfile);
let mut pcapw = PcapWriter::new(writer, file_opts).unwrap();

// copy all packets from example.pcap to copy.pcap
while let Some(packet) = pcapr.next().unwrap() {
    println!("packet at {:?} with size {} (cropped from {})",
        packet.time, packet.data.len(), packet.orig_len);
    pcapw.write(&packet).unwrap();
}

请注意,本库不支持较新的pcapng文件格式。如果需要,您可能需要查看为Rust的libpcap-wrapper。同样,如果需要它自带的先进过滤选项,也可以查看。要分析pcap文件中的数据包,可以使用pnet库。在我编写和发布这个库之间,似乎出现了pcap-filepcap-rs库,这些库似乎与本库功能相似。

选项

默认情况下,时间戳以std::time::SystemTime类型返回。使用time功能,您可以选择从time包(版本1.0)中以time::Timespec类型获取值。

[dependencies]
rpcap = { version = "1.0.0", features = ["time"] }

许可证

根据您的要求,许可如下:

任选其一。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交以包含在本作品中的任何贡献,将根据上述条款双重许可,不附加任何额外的条款或条件。

从版本0.3升级

PcapWriter::append 现在需要一个类型为 Read + Write + Seek 的参数。这允许库确保写入的包的输出格式与文件头中指定的格式相匹配。如果这对您的用例不起作用,您可以使用新的 PcapWriter::append_unchecked 函数。请务必仅在使用此库在相同平台上创建的文件中使用它,否则文件可能会损坏。

PcapReader::new 现在返回一个关于文件头和伪迭代器的元组。如果您不需要元组中的第一个项目,您可以这样做:let (_, reader) = PcapReader::new()

WriteOptions 现在称为 FileOptions,并增加了两个字段。因此,现在可以创建所有可能的PCAP(v1)文件。由于之前的更改,现在手动创建此结构体的实例的可能性大大降低。如果您确实这样做,并且是从旧版本升级的,请将 high_res_timestamps 设置为 true,将 non_native_byte_order 设置为 false,以恢复旧的行为。

依赖关系

~2MB
~48K SLoC