#数据链路 #网络 #原始 #以太网 #底层

pnet_sys_bandwhich_fork

访问网络相关系统功能和调用

1 个不稳定版本

使用旧的Rust 2015

0.23.0 2020年1月7日

#18 in #数据链路

每月 21 次下载
用于 2 crates

MIT/Apache

21KB
498

libpnet Crates.io 许可证 文档

构建状态: 构建状态

讨论和支持

libpnet 为使用Rust进行底层网络提供了跨平台的API。

有四个关键组件

  • 模块 packet,允许安全地构建和操作数据包;
  • crate 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/](https://docs.rs/pnet/)

用法

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

[dependencies.pnet]
version = "0.34.0"

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

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

Windows

在Windows上构建有三个要求

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

依赖关系

~66KB