#packet-parser #tcp-udp #networking #udp #ip #tcp

dev packet

网络数据包处理

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

Download history 556/week @ 2024-03-13 656/week @ 2024-03-20 520/week @ 2024-03-27 465/week @ 2024-04-03 473/week @ 2024-04-10 482/week @ 2024-04-17 785/week @ 2024-04-24 479/week @ 2024-05-01 643/week @ 2024-05-08 699/week @ 2024-05-15 632/week @ 2024-05-22 602/week @ 2024-05-29 559/week @ 2024-06-05 743/week @ 2024-06-12 540/week @ 2024-06-19 557/week @ 2024-06-26

每月下载量 2,492
8 个 Crates 使用

WTFPL 许可证

185KB
5K SLoC

packet Crates.io packet WTFPL 构建状态

此 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::Buildertcp::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