2个版本

使用旧Rust 2015

0.9.1 2017年6月27日
0.9.0 2016年8月23日

#12#netfilter

40 每月下载次数

GPL-2.0+

26KB
356

nfqueue-bindings-rs

Build Status

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 身份运行您的程序并降权

依赖关系