有没有一种方法可以在不使用shell脚本的情况下以编程方式查询iptables?我没有自由使用shell脚本来运行iptables命令和grep输出。使用GNU C是否存在对iptables的本机(API)级别访问?至少我想查询iptables的默认策略。
我希望使用/ proc文件系统,但我不认为它是implemented yet.
答案 0 :(得分:5)
您可以与名为 iptables
的libiptc
库进行交互。
这就是我为iptables
创建Perl界面的方式:CPAN IPTables::libiptc
但是libiptc
库只为您提供了基本链结构的API。
访问和解析单个规则有点复杂,因为它依赖于dyn-loading
各个目标/匹配模块的共享库。
我的CPAN module中的方法是,我与do_command()
的{{1}}相关联,用于执行规则更改。
您需要知道的另一件事是:
单个iptables.c
电话,执行以下操作:
iptables
因此,如果您每次只进行一次更改,那么这是一个繁重的过程。 但是你也可以利用这个优势,并一次执行许多更改,并将这些更改显示为内核的单个原子更改。
答案 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来解决它。