1 个不稳定版本
使用旧的 Rust 2015
0.9.0 | 2016 年 8 月 23 日 |
---|
#13 在 #netfilter
28KB
433 行
nflog-bindings-rust
概述
nflog-rust 是 libnetfilter-log 的包装库。目标是提供一个库来访问内核包过滤器队列中的数据包。
需要注意的是,这些绑定不会盲目遵循 libnetfilter_log API。例如,将提供一些高级包装器来处理 open/bind/create 机制(使用一个函数调用而不是三个)。
由于已经存在解码 IP 数据包的库,绑定将使用这些库。
要使用此库,程序必须
- 打开队列
- 绑定到网络家族(对于 IPv4,使用
AF_PACKET
) - 提供回调函数,当接收到数据包时,将自动调用该函数。
- 创建队列,提供队列号(必须与 iptables 规则中的
--nflog-group
匹配,见下文 - 运行循环,等待事件。程序还应提供一种干净的方法来退出循环(例如在
SIGINT
时)
文档
文档使用 cargo doc
命令创建。
示例
查看 test_nflog 以获取最小示例。
IPtables
您必须在 netfilter 中添加规则,以便将数据包发送到用户空间队列。队列号(netfilter 中的 --nflog-group 选项)必须与创建_queue() 提供的号码匹配。
iptables 规则示例
iptables -A OUTPUT --destination 1.2.3.4 -j NFLOG --nflog-group 0
当然,根据您的需求,您应该更加严格。
权限
nflog-rust 不需要 root 权限,但需要打开 netlink 套接字并向内核发送/接收数据包。
您有几种选择
- 使用 CAP_NET_ADMIN 能力以允许您的应用程序从内核空间接收并发送数据包:
setcap 'cap_net_admin=+ep' /path/to/program
- 以
root
身份运行您的程序并降权
许可
此库根据 GNU 通用公共许可证版本 2.0 许可,或(根据您的选择)任何后续版本。
依赖项
~43KB