#packet #capture #utilities #transmission #building #protocols #layer

无 std rscap

Rust 数据包捕获和处理工具

3 个版本

0.1.2 2024年7月27日
0.1.1 2023年3月23日
0.1.0 2023年3月4日

#621 in 网络编程

Download history 6/week @ 2024-07-06 175/week @ 2024-07-27 1/week @ 2024-08-03

每月176 次下载

MIT/Apache

175KB
3K SLoC

Rscap

Latest Version Documentation rscap: rustc 1.65+

rscap - Rust 数据包捕获和处理工具


rscap 是一个多用途库,用于网络数据包捕获/传输和数据包构建。它的目标有两个:

  1. 提供 Rust 原生平台工具进行数据包捕获和传输(与 libpcap 相当,但完全用 Rust 编写)
  2. 提供一个强大且易用的 API,用于构建数据包和访问/修改各种网络协议(如 scapy,但具有强类型和显著提高的性能)

rscap 子模块专注于(1)——它提供安全的 Rust 原生 API,用于在网络接口上捕获数据包。目前仅支持 Linux 操作系统,尽管正在开发支持 MacOS、BSD 和 Windows 的多平台 API。

功能

  • 平台无关的数据包捕获/传输接口: rscap 致力于提供一种统一的接口,用于在所有支持的平台之间捕获和传输数据包。此外,该库还公开了平台特定数据包捕获工具(如 Linux 中的 AF_PACKET/PACKET_MMAP 套接字)的安全抽象,以支持需要精细控制或特定平台功能的情况。
  • 构建/修改数据包的强大 API: pkts 子模块提供简单的操作,将不同的层组合成一个数据包,并索引到数据包的不同层以检索或修改字段。使用过 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类型甚至可以堆叠,以便可以轻松地将应用层数据从捕获的数据包中重新组装。它们在无标准环境中也能正常工作,无论是否使用alloc
  • 支持状态数据包:许多网络协议是状态化的,除非存储有关协议会话的信息,否则解析此类协议的数据包可能很困难(甚至不可能)。rscap提供了处理此类数据包的Session类型--会话确保数据包根据协议的当前预期状态进行验证。就像Sequence一样,Session类型也与无标准环境兼容,并且不需要alloc

许可证

此项目的源代码根据您的选择,受MIT许可证或Apache 2.0许可证的许可。

依赖项

~150KB