4个版本
0.1.3 | 2023年3月23日 |
---|---|
0.1.2 | 2023年3月16日 |
0.1.1 | 2023年3月15日 |
0.1.0 | 2023年3月4日 |
#29 in #ipv4
每月46次下载
用于 rscap
740KB
16K SLoC
pkts
pkts - 一个用于创建、解码和修改数据包层的rscap子模块
Rscap是一个多功能的网络数据包捕获/传输和构建库。其目标有两方面
- 提供Rust本地平台工具进行数据包捕获和传输(类似于
libpcap
,但完全用Rust编写) - 提供一个强大且直观的API,用于构建数据包以及访问/修改各种网络协议中的数据包数据字段(类似于
scapy
,但具有强类型和显著提高的性能)
pkts
子模块专注于(2)——它为各种网络协议层提供了数据包构建API。这个库不仅仅覆盖从物理层到传输层的所有层或无状态协议——多亏了Sequence
和Session
类型(分别用于重新组装/重新排序数据包和跟踪数据包状态),任何应用层协议都可以轻松捕获和解析。
特性
- 强大的构建/修改数据包的API: rscap提供了简单的操作,将各种层组合成一个单独的数据包,并索引到数据包的不同层以检索或修改字段。熟悉
scapy
的用户可能会发现API非常熟悉,特别是对于层组合和索引操作。
use layers::{ip::Ipv4, tcp::Tcp};
let pkt = Ip::new() / Tcp::new();
pkt[Tcp].set_sport(80);
pkt[Tcp].set_dport(12345);
- 数据包去碎片/重新排序: 在某些协议中,数据包可能会被碎片化(例如IPv4)或到达顺序错误(TCP、SCTP等)。Rscap通过
Sequence
类型透明地处理去碎片化和重新排序,克服了这两个问题。Sequence
类型甚至可以堆叠,以便从捕获的数据包中轻松重新组装应用层数据。它们在无std
环境中(无论是否使用alloc
)都可以工作。 - 支持状态包:许多网络协议是状态性的,解释此类协议的包可能很困难(如果不可能),除非存储有关协议会话的信息。Rscap提供了处理这类包的
Session
类型--会话确保基于协议当前预期状态验证包。就像Sequence
一样,Session
类型与no-std
环境兼容,并且不需要alloc
。
许可证
本项目的源代码根据您选择的MIT许可证或Apache 2.0许可证进行许可。
依赖项
~1.5MB
~35K SLoC