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 日

#330网络编程

Download history 55342/week @ 2024-04-28 56369/week @ 2024-05-05 74290/week @ 2024-05-12 59485/week @ 2024-05-19 55722/week @ 2024-05-26 63808/week @ 2024-06-02 61326/week @ 2024-06-09 64622/week @ 2024-06-16 60920/week @ 2024-06-23 67401/week @ 2024-06-30 68215/week @ 2024-07-07 65940/week @ 2024-07-14 78289/week @ 2024-07-21 70434/week @ 2024-07-28 73266/week @ 2024-08-04 68686/week @ 2024-08-11

每月 293,969 次下载
用于 303 个包 (13 直接)

MIT/Apache

20KB
295

libpnet Crates.io 许可 文档

构建状态: 构建状态

讨论和支持

libpnet 提供了一个使用 Rust 进行低级网络编程的跨平台 API。

有四个关键组件

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

为什么?

使用低级网络编程有很多原因,而使用 Rust 进行更多操作更是如此。以下是一些概述

开发传输协议

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

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

前一种方法非常适合尝试新想法和快速原型设计,但在实际应用中并不那么出色。虽然通常可以从这些实现中获得合理的性能,但它们的速度通常比C语言实现慢得多,而且不适用于任何“重负载”操作。

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

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

使用libpnet和Rust,您可以同时拥有这两者的优势。高级抽象、内存和线程安全性,以及C语言的性能。

网络工具

许多网络工具,如ping和traceroute,依赖于能够操纵网络和传输层头,而这在标准网络堆栈(如由std::io::net提供的)中是不可能的。

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

文档

最新构建的API文档可以在以下位置找到: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,请确保使用“以WinPcap API兼容模式安装Npcap”)
  • 您必须将WinPcap开发者包中的Packet.lib放置在名为lib的目录中,在仓库的根目录下。或者,您可以使用环境变量中列出的任何位置:%LIB%/$Env:LIB。对于64位工具链,它在WpdPack/Lib/x64/Packet.lib中,对于32位工具链,它在WpdPack/Lib/Packet.lib中。

依赖项

~170–335KB