如何以编程方式访问iptables?

时间:2011-12-22 11:21:13

标签: linux gnu iptables

有没有一种方法可以在不使用shell脚本的情况下以编程方式查询iptables?我没有自由使用shell脚本来运行iptables命令和grep输出。使用GNU C是否存在对iptables的本机(API)级别访问?至少我想查询iptables的默认策略。

我希望使用/ proc文件系统,但我不认为它是implemented yet.

5 个答案:

答案 0 :(得分:5)

您可以与名为 iptables libiptc库进行交互。

这就是我为iptables创建Perl界面的方式:CPAN IPTables::libiptc

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

我的CPAN module中的方法是,我与do_command()的{​​{1}}相关联,用于执行规则更改。

您需要知道的另一件事是

单个iptables.c电话,执行以下操作:

  1. 将整个规则集从内核复制到用户空间
  2. 使用iptables
  3. 解析它
  4. 执行一项或多项更改(通常只需通过iptables cmd进行一次更改)
  5. 通过libiptc
  6. 将其转换为内核blob格式
  7. 将整个(新)规则集从用户空间复制到内核。
  8. 因此,如果您每次只进行一次更改,那么这是一个繁重的过程。 但是你也可以利用这个优势,并一次执行许多更改,并将这些更改显示为内核的单个原子更改。

答案 1 :(得分:3)

所以看起来没有任何办法,Netfilter集团也承认了这一点。

参见SO问题How can I programmatically manage iptables rules on the fly?

答案 2 :(得分:0)

正如我在评论中所说,ltrace - iptables -L,我发现我的Debian / Sid上有iptables-dev个包libipq和相关的库。您可能想要使用它。

答案 3 :(得分:0)

我会在/ proc / net /下使用proc文件系统 看看http://www.netfilter.org/documentation/FAQ/netfilter-faq-3.html#ss3.9并查找proc(在不同的问题中)

答案 4 :(得分:0)

嗯,为什么他要调查iptables的来源以获得一个想法?我不明白为什么如果源只包含所需的代码,就会使用strace来解决它。