11 个版本
0.5.0 | 2024 年 7 月 24 日 |
---|---|
0.4.5 | 2022 年 12 月 28 日 |
0.4.4 | 2021 年 10 月 8 日 |
0.4.1 | 2021 年 2 月 23 日 |
0.1.0 | 2017 年 12 月 20 日 |
#7 在 macOS 和 iOS API 中
8,638 每月下载量
220KB
6.5K SLoC
pfctl
用于与 macOS 上的数据包过滤器(PF)防火墙交互的库。
通过 ioctl 系统调用和 /dev/pf
设备控制 macOS 上的 PF 防火墙。
读取和写入 /dev/pf
需要 root 权限。因此,任何使用此 crate 的程序都必须以超级用户身份运行,否则创建 PfCtl
实例将会因“权限被拒绝”错误而失败。
操作系统兼容性
PF 是大多数(所有?)BSD 系统中使用的防火墙,但此 crate 目前仅支持 macOS 变体。如果能够在更多 BSD 系统上使其工作,那将是很好的,但到目前为止还没有在这方面投入工作。
用法和示例
有关如何使用此 crate 的各种功能的示例可以在 集成测试 和 示例 中找到。
以下是一个简单的示例,说明如何启用防火墙并添加数据包过滤规则
extern crate pfctl;
// Create a PfCtl instance to control PF with:
let mut pf = pfctl::PfCtl::new().unwrap();
// Enable the firewall, equivalent to the command "pfctl -e":
pf.try_enable().unwrap();
// Add an anchor rule for packet filtering rules into PF. This will fail if it already exists,
// use `try_add_anchor` to avoid that:
let anchor_name = "testing-out-pfctl";
pf.add_anchor(anchor_name, pfctl::AnchorKind::Filter).unwrap();
// Create a packet filtering rule matching all packets on the "lo0" interface and allowing
// them to pass:
let rule = pfctl::FilterRuleBuilder::default()
.action(pfctl::FilterRuleAction::Pass)
.interface("lo0")
.build()
.unwrap();
// Add the filterig rule to the anchor we just created.
pf.add_rule(anchor_name, &rule).unwrap();
系统绑定
有关如何生成系统库的 Rust 绑定的说明,请参阅 generate_bindings.sh
中的注释
许可证:MIT/Apache-2.0
依赖项
~1–1.6MB
~35K SLoC