1 个不稳定版本

使用旧的 Rust 2015

0.9.0 2016 年 8 月 23 日

#13#netfilter

GPL-2.0+

28KB
433

nflog-bindings-rust

Build Status

概述

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