如何以编程方式访问iptables?

有没有一种方法,我们可以通过编程方式查询iptables而无需使用shell脚本? 我没有使用shell脚本运行iptables命令和grep输出的自由。 是否有使用GNU C的本地(API)级别访问iptables? 在最低限度,我想查询iptables的默认策略。

我希望能使用/ proc文件系统,但我不认为它的实现。

你可以使用名为libiptciptables库进行连接。

这就是我已经创建了我的Perl接口iptables : CPAN IPTables :: libiptc

但是libiptc库只给你一个基本结构的API。 访问和解析单个规则有点复杂,因为它依赖于个别目标/匹配模块的共享库的动态dyn-loading

我在CPAN模块中的做法是,我已经通过iptables.c链接了do_command() ,以进行规则更改。

另一件你需要知道的是

一个单一的iptables调用,执行这些操作:

  1. 将整个规则集从内核复制到用户空间
  2. libiptc解析它
  3. 执行一个或多个更改(通常只需通过iptables cmd更改)
  4. 通过libiptc将其转换为内核blob格式
  5. 将整个(新)规则集从用户空间复制到内核。

因此,一个繁重的过程,如果你每次只做一个单一的改变。 但是你也可以使用这个优点,并且一次执行很多变化,并且这些变化看起来像是一个单一的原子的变化。

所以看起来似乎没有任何办法,Netfilter小组已经确认了这一点。

看到SO问题, 我怎样才能以编程方式管理iptables规则?

正如我在评论中所说的那样,通过ltrace -ing iptables -L ,我发现在我的Debian / Sid上有libipq和相关库的iptables-dev软件包。 你可能会想要使用它。

嗯,他为什么不看看iptables的来源,以获得一个想法? 我不明白为什么要使用strace来弄清楚,如果源只包含所需的代码。