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 在 网络编程
每月337次下载
在 3 crate 中使用
36KB
707 行
RPCAP
一个用于读取和写入PCAP文件的纯Rust库。
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-file和pcap-rs库,这些库似乎与本库功能相似。
选项
默认情况下,时间戳以std::time::SystemTime
类型返回。使用time
功能,您可以选择从time
包(版本1.0
)中以time::Timespec
类型获取值。
[dependencies]
rpcap = { version = "1.0.0", features = ["time"] }
许可证
根据您的要求,许可如下:
- Apache License,版本2.0,(LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT或http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则根据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