2011-12-22 117 views
4

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

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

+0

这种问题的常见答案是尝试“strace”或“ltrace”命令,例如, 'strace iptables -L' – 2011-12-22 11:24:03

+1

可能重复的[我怎样才能以编程方式管理iptables规则?](http://stackoverflow.com/questions/109553/how-can-i-programmatically-manage-iptables-rules-在运行中) – 2015-03-06 23:24:43

回答

0

正如我在评论说,通过ltrace -ing iptables -L,我富尔德,有一个iptables-dev包在我的Debian/Sid与libipq和相关的库。你可能会想使用它。

0

嗯,他为什么shouln't看看iptables来获得的来源一个主意?我不明白为什么要使用strace来判断源代码是否包含所需的代码。

5

您可以用iptables库接口称为libiptc

那怎么我创建了我的Perl接口iptablesCPAN IPTables::libiptc

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

我在我的CPAN module的做法是,我曾与do_command()iptables.c链接,这样做规则变化。

你需要知道的另一件事是

单个iptables呼叫,请执行以下操作:

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

因此,一个沉重的过程,如果你只是每次都做一个单独的更改。 但是你也可以使用它来获得优势,并且一次执行许多更改,并且通过/为内核显示为单个原子更改。

+0

请注意,命令:'iptables-restore'使用智能方法在将更改提交到内核之前进行许多更改。 – NetOptimizer 2012-10-01 19:01:30