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 网络编程
每月50,424次下载
用于 68 个Crate (58个直接使用)
170KB
3.5K SLoC
pcap
这是一个用于访问libpcap(或Windows上的Npcap)的包嗅探功能的Rust语言crate。如果您需要任何帮助,请随时提交问题或发送pull请求!
功能
- 列出设备
- 在设备或保存文件上打开捕获句柄
- 从捕获句柄获取数据包
- 使用BPF程序过滤数据包
- 列出/设置/获取数据链路链类型
- 配置一些参数,如混杂模式和缓冲区长度
- 将数据包写入保存文件
- 将数据包注入接口
请参阅示例了解用法。
构建
此crate需要libpcap(或Windows上的Npcap)库。
安装依赖项
Windows
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-config
,LIBPCAP_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 构建所用的锁文件。
许可证
根据您的要求,许可为以下之一:
- Apache License,版本 2.0,(LICENSE-APACHE 或 http://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确表示否则,根据 Apache-2.0 许可证的定义,您有意提交以包含在作品中的任何贡献,将按上述方式双重许可,不附加任何额外的条款或条件。
依赖项
~0.1–11MB
~97K SLoC