2个版本
使用旧Rust 2015
0.9.1 | 2017年6月27日 |
---|---|
0.9.0 | 2016年8月23日 |
#12 在 #netfilter
40 每月下载次数
26KB
356 行
nfqueue-bindings-rs
nfqueue-rs 是 libnetfilter-queue 的包装库。目标是提供一个库以访问内核数据包过滤器排队的包。
需要注意的是,这些绑定不会盲目地遵循 libnetfilter_queue API。例如,将提供一些高级包装器来处理打开/绑定/创建机制(使用一个函数调用代替三个)。
API尚未稳定。
要使用此库,程序必须
- 打开队列
- 绑定到网络族(IPv4为
AF_PACKET
) - 提供一个回调函数,该函数在收到数据包时将被自动调用。回调必须返回一个判决结果
- 创建队列,提供队列号(必须与下面的 iptables 规则中的
--queue-num
匹配) - 运行循环,等待事件。程序还应该提供一种干净的方式来退出循环(例如在
SIGINT
时)
示例
请参阅 nfq-example 以获取最小示例。
IPtables
您必须在 netfilter 中添加规则以将数据包发送到用户空间队列。队列号(netfilter 中的 --queue-num 选项)必须与创建队列()提供的数字匹配。
iptables 规则示例
iptables -A OUTPUT --destination 1.2.3.4 -j NFQUEUE --queue-num 0
当然,您应该根据您的需求更加严格。
权限
nfqueue-rs 不需要 root 权限,但需要打开 netlink 套接字并向内核发送/接收数据包。
您有几个选择
- 使用 CAP_NET_ADMIN 功能以允许您的应用程序从内核空间接收并向内核空间发送数据包:
setcap 'cap_net_admin=+ep' /path/to/program
- 以
root
身份运行您的程序并降权