41个版本 (5个稳定版)

2.0.0 2024年4月21日
1.3.0 2024年3月15日
1.2.0 2024年1月19日
1.1.0 2023年5月12日
0.1.0 2015年3月26日

#103 in 网络编程

Download history 10729/week @ 2024-05-03 10925/week @ 2024-05-10 12427/week @ 2024-05-17 11092/week @ 2024-05-24 11434/week @ 2024-05-31 10081/week @ 2024-06-07 11639/week @ 2024-06-14 12483/week @ 2024-06-21 9890/week @ 2024-06-28 10747/week @ 2024-07-05 12058/week @ 2024-07-12 13049/week @ 2024-07-19 13180/week @ 2024-07-26 12149/week @ 2024-08-02 11893/week @ 2024-08-09 10669/week @ 2024-08-16

每月50,424次下载
用于 68 个Crate (58个直接使用)

MIT/Apache

170KB
3.5K SLoC

pcap

这是一个用于访问libpcap(或Windows上的Npcap)的包嗅探功能的Rust语言crate。如果您需要任何帮助,请随时提交问题或发送pull请求!

Linux Mac OS Windows Coverage Crates.io Docs.rs

功能

  • 列出设备
  • 在设备或保存文件上打开捕获句柄
  • 从捕获句柄获取数据包
  • 使用BPF程序过滤数据包
  • 列出/设置/获取数据链路链类型
  • 配置一些参数,如混杂模式和缓冲区长度
  • 将数据包写入保存文件
  • 将数据包注入接口

请参阅示例了解用法。

构建

此crate需要libpcap(或Windows上的Npcap)库。

安装依赖项

Windows

  1. 安装 Npcap
  2. 下载Npcap SDK
  3. 将SDK的/Lib/Lib/x64文件夹添加到您的LIB环境变量中。

Linux

安装libpcap库的库和头文件。例如

  • 在基于Debian的Linux上:安装libpcap-dev
  • 在Fedora Linux上:安装libpcap-devel

注意:如果不是以root身份运行,则需要设置类似以下的能力:sudo setcap cap_net_raw,cap_net_admin=eip 路径/到/bin

Mac OS X

默认情况下,Mac OS X上应该安装了libpcap

注意:零超时可能会导致 pcap::Capture::next 挂起且永不返回(因为它在返回之前等待超时到期)。可以通过使用非零超时(如libpcap手册建议的)并在循环中调用 pcap::Capture::next 来解决这个问题。

链接

作为crate用户,您有责任通过您的自己的 构建脚本 配置与libpcap/wpcap的链接以适应您的需求(例如,库版本、静态链接与动态链接等)。对于大多数设置,默认值很可能足够,并且您不需要做任何特殊操作,只需按照上述描述安装libpcap即可。以下说明是在默认值不适用时提供的。

支持不同版本的库

此crate支持多个不同版本的libpcap,例如wpcap,以确保它可以在针对旧版本编译的同时,还能访问新版本中提供的功能。构建脚本将尝试自动检测正确的版本并配置pcap,但它可能无法完成此任务。特别是,如果您有一个不寻常的构建设置。如果您遇到类似以下形式的编译错误

cannot find function `pcap_<some_function>` in module `raw`

那么这可能是发生的情况。很可能您的libpcap不支持最新的libpcap API,并且pcap未能查询libpcap以找出应排除哪些不受支持的功能。

为了解决这个问题,您可以尝试以下两种方法来帮助pcap crate编译与您的libpcap兼容的正确功能集

库位置

如果您正在动态链接libpcap,pcap将尝试咨询libpcap以确定其版本。但是,如果您的库位于非常规位置并且您必须在自己的构建脚本中自定义 cargo:rustc-link-search=native,那么pcap的构建脚本无法捕捉到这一点,并将默认使用最新的API版本。如果您不使用最新的库版本,请通过使用环境变量 LIBPCAP_LIBDIR 将库的位置传达给pcap的构建脚本。

如果未设置 LIBPCAP_LIBDIR,则构建将尝试通过 pkg-config 来查找库。在大多数设置中,这是使一切正常工作最简单的方法,甚至可能消除您在软件中需要任何自定义构建脚本的需求。

库版本

如果设置库位置不起作用或您正在静态链接,您可能需要手动设置libpcap版本。您可以通过将环境变量 LIBPCAP_VER 设置为所需版本(例如,env LIBPCAP_VER=1.5.0)来完成此操作)。默认情况下,如果pcap未能查询libpcap/wpcap的API版本,它将假设最新的API,因此这仅在您使用旧版本的libpcap时才是必要的。

请注意,即使您没有设置 LIBPCAP_LIBDIR 并使用 pkg-configLIBPCAP_VER 也会受到尊重。如果未设置,我们将找到任何可用的版本,只要它受到库的支持。

可选功能

capture-stream

使用 capture-stream 功能来启用对流式数据包捕获的支持。

[dependencies]
pcap = { version = "2", features = ["capture-stream"] }

不稳定功能

自行承担风险,我们不认为这是我们的公共API。

lending-iter

使用 lending-iter 功能来启用数据包迭代器的借用。请参阅 lendingiterprint 示例。

最小支持的Rust版本(MSRV)

此crate使用Rust 2021,需要编译器版本 >= 1.63。

功能 capture-stream 依赖于 tokio = "1.0"。因此,当 capture-stream 启用时,此包需要足够新的编译器版本来编译 tokio 包。

一些依赖不再支持我们选择的 MSRV。由于许多包不认为这是一个破坏性更改,因此通过 semver 要求来防止这种情况的余地不大。然而,用户可以通过 Cargo.lock 文件来保护自己免受此类不兼容性的影响。我们提供了一个 msrv.lock,这是我们 CI 中测试 MSRV 构建所用的锁文件。

讨论 MSRV.

许可证

根据您的要求,许可为以下之一:

任选其一。

贡献

除非您明确表示否则,根据 Apache-2.0 许可证的定义,您有意提交以包含在作品中的任何贡献,将按上述方式双重许可,不附加任何额外的条款或条件。

依赖项

~0.1–11MB
~97K SLoC