5 个版本
0.1.4 | 2020年11月27日 |
---|---|
0.1.3 | 2020年5月24日 |
0.1.2 | 2017年7月29日 |
0.1.1 | 2017年6月9日 |
0.1.0 | 2017年6月9日 |
在 网络编程 中排名第 1312
每月下载量 2,492 次
被 8 个 Crates 使用
185KB
5K SLoC
packet
此 crate 允许使用直观的 API 解析和创建各种网络数据包。
用法
首先,将以下内容添加到您的 Cargo.toml
[dependencies]
packet = "0.1"
然后,将此内容添加到您的 crate 根目录
extern crate packet;
Packet
数据包可以存储任何实现 &[u8]
或 Vec<u8>
或您自己的缓冲区类型的类型,这意味着它们可以借用一个 &[u8]
或拥有一个 Vec<u8>
或您自己的缓冲区类型,而无需不同的类型或令人烦恼的生命周期参数。
如果类型还实现了 AsMut<[u8]>
一些字段可以就地修改,而不是通过构建器,并不是所有字段都可以这样设置,例如任何具有动态大小的字段。
任何数据包中的字段都直接从缓冲区解析,唯一例外是需要验证数据包正确性的字段。
正确性检查不进行任何校验和验证,这是因为某些协议需要额外的信息来计算校验和,例如 TCP 和 UDP 需要 IP 数据包来验证。
缓冲区
缓冲区是对可增长或静态切片的抽象,它们实现了一个分层设置,其中每个构建器创建自己的层,对缓冲区的任何访问都从层的起始位置开始。
缓冲区可以增长,但如果底层缓冲区不可增长,则操作可能会失败。静态缓冲区只有在无法容纳请求的大小时会失败。
构建器
构建器是结构,它们接受一个 Buffer
(或内部创建一个)并逐步定义一个新的数据包。
上层协议的构建器通常提供创建特定子协议的方法,例如 ip::v4::Builder
允许创建一个 udp::Builder
或 tcp::Builder
并根据需要处理校验和和长度界定。
示例
创建一个ICMP回显请求数据包。
extern crate packet;
use packet::builder::Builder;
use packet::icmp;
fn main() {
let packet = icmp::Builder::default()
.echo().unwrap().request().unwrap()
.identifier(42).unwrap()
.sequence(2).unwrap()
.payload(b"test").unwrap()
.build().unwrap();
}
依赖关系
~1.6–2.2MB
~27K SLoC