2014-02-14 56 views
3

我想了解如何通过C/C++库来检查防火墙是否打开/关闭。有这样的图书馆吗?谢谢。检查是否在Linux上通过C库启用了防火墙

+6

什么“防火墙”?你的意思是在iptable中有规则吗?那么应该遵循什么规则? –

+0

只有我需要检查是否有任何防火墙打开/关闭端口 – AlbertSec

+1

考虑到“防火墙”(又名iptables/nftables)可以用于很多不同的事情,其中​​之一恰好是防火墙,这不是将是一件容易的事。你可以检查表格,看看是否添加了规则,但要告诉他们是否是“防火墙”规则或其他什么将需要大量的工作... – twalberg

回答

1

这需要对iptables进行检查,并且没有可用于此的库。 可以使用“libiptc”,但它不适用于公共接口。

3

这里是iptables用途:

$ ldd /sbin/iptables 
linux-vdso.so.1 => (0x00007fffa69fe000) 
libip4tc.so.0 => /lib/libip4tc.so.0 (0x00007fe53853c000) 
libip6tc.so.0 => /lib/libip6tc.so.0 (0x00007fe538334000) 
libxtables.so.7 => /lib/libxtables.so.7 (0x00007fe538127000) 
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe537d67000) 
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fe537b63000) 
/lib64/ld-linux-x86-64.so.2 (0x00007fe53875d000) 

正如你所看到的,这是libip4tclipip6tclibxtables。但是,它们并不适用于外部接口。我建议你改为致电iptables-save,并从中处理机器可读的输出。

2

如果你真的想通过一个C程序来这样做,那么这可能会解决你的目的:)

chk_fw() 
    { 
     const char * cmd = "service iptables status"; 
     system(cmd); 
    } 

输出:iptables: Firewall is not running.

+0

我想检查你的功能,因为我没有知道它是否能够检测到防火墙的所有规则 – AlbertSec

+0

不,它不会......但如果你想这样,那么改变'cmd'并得到你想要的结果 – Akaks

+0

我测试了你的函数(在我的Debian机器中)并输出显示:“ iptables:无法识别的服务“ – AlbertSec