# #数据包 #协议 #传输层 #网络 #序列 #IPv4

无std pkts

构建、检查和修改网络协议数据包的工具

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

MIT/Apache

740KB
16K SLoC

pkts

Latest Version Documentation pkts: rustc 1.65+

pkts - 一个用于创建、解码和修改数据包层的rscap子模块


Rscap是一个多功能的网络数据包捕获/传输和构建库。其目标有两方面

  1. 提供Rust本地平台工具进行数据包捕获和传输(类似于libpcap,但完全用Rust编写)
  2. 提供一个强大且直观的API,用于构建数据包以及访问/修改各种网络协议中的数据包数据字段(类似于scapy,但具有强类型和显著提高的性能)

pkts子模块专注于(2)——它为各种网络协议层提供了数据包构建API。这个库不仅仅覆盖从物理层到传输层的所有层或无状态协议——多亏了SequenceSession类型(分别用于重新组装/重新排序数据包和跟踪数据包状态),任何应用层协议都可以轻松捕获和解析。

特性

  • 强大的构建/修改数据包的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