14个重大版本

0.35.0 2024年5月30日
0.34.0 2023年7月19日
0.33.0 2023年2月3日
0.31.0 2022年6月1日
0.20.0 2017年10月30日

#1043 in 网络编程

Download history 26617/week @ 2024-04-26 27354/week @ 2024-05-03 36142/week @ 2024-05-10 25957/week @ 2024-05-17 26452/week @ 2024-05-24 27682/week @ 2024-05-31 26956/week @ 2024-06-07 26692/week @ 2024-06-14 31119/week @ 2024-06-21 39031/week @ 2024-06-28 34517/week @ 2024-07-05 34460/week @ 2024-07-12 35757/week @ 2024-07-19 34826/week @ 2024-07-26 35543/week @ 2024-08-02 27948/week @ 2024-08-09

141,196 每月下载量
384 个crate(9直接)中使用

MIT/Apache

31KB
662

libpnet Crates.io 许可 文档

构建状态: 构建状态

讨论和支持

libpnet为使用Rust的低级别网络提供了跨平台API。

有四个关键组件

  • 具有安全构建和操作数据包的功能的packet模块;
  • 提供数据包模块基础设施的pnet_macros crate;
  • 允许实现传输协议的transport模块;
  • 允许直接发送和接收数据链路数据包的datalink模块。

为什么?

使用低级别网络有很多原因,而使用Rust来做更是如此。这里简要概述了其中一些

开发传输协议

开发新的传输层协议通常有两种方法

  • 用Python等脚本语言编写;
  • 用C编写。

前者非常适合尝试新想法和快速原型设计,但作为实际应用的实现则不是很好。虽然通常可以从这些实现中获得合理的性能,但它们的速度通常比C实现慢得多,不适合任何“重负载”。

下一个选项是将它用C语言编写 - 这将为您提供出色的性能,但也会带来一系列其他问题

  • 内存安全问题 - 这是基于C的网络安全漏洞和其他错误的巨大来源。忘记边界检查或在释放指针后使用指针非常容易。
  • 线程安全问题 - 您必须非常小心,确保使用正确的锁,并且使用正确。
  • 缺乏高级抽象 - Python等脚本语言的吸引力之一是其高级抽象,这使API更简单,编程更轻松。

使用 libpnet 和 Rust,您可以同时获得两者的优点。高级抽象、内存和线程安全性,以及C的性能。

网络工具

许多网络工具,如ping和traceroute,依赖于能够操作网络和传输头,而标准的网络堆栈(如由 std::io::net 提供的)则无法实现。

直接在数据链路层工作可能很有用,可以看到数据包在“线上”的状态。这有很多用途,包括网络诊断、数据包捕获和流量整形。

文档

最新构建的API文档可以在以下位置找到:[https://docs.rs/pnet/](https://docs.rs/pnet/)

用法

要在项目中使用 libpnet,请将以下内容添加到您的 Cargo.toml 文件中

[dependencies.pnet]
version = "0.35.0"

libpnet 应该与Rust的最新稳定版本兼容。

在运行测试套件时,有一些网络测试可能会失败 - 解决此问题的最简单方法是作为root或管理员用户运行 cargo test。这通常可以避免,但这更复杂。

Windows

在Windows上构建有三个要求

  • 您必须使用使用MSVC工具链的Rust版本
  • 您必须安装 WinPcapnpcap(使用WinPcap 4.1.3版本进行测试)(如果使用npcap,请确保使用“安装Npcap在WinPcap API兼容模式”安装)(如果使用npcap,请确保使用“安装Npcap在WinPcap API兼容模式”安装)
  • 您必须将 Packet.libWinPcap开发者包 中放置在名为 lib 的目录中,在仓库的根目录下。或者,您可以使用 %LIB%/$Env:LIB 环境变量中列出的任何位置。对于64位工具链,它在 WpdPack/Lib/x64/Packet.lib 中,对于32位工具链,它在 WpdPack/Lib/Packet.lib 中。

依赖关系

~215KB