我只想在我的c程序中使用iptables命令

时间:2010-03-20 04:24:55

标签: c linux iptables

我正在设计一个简单的c代码来根据需要调用iptables命令。 我只想使用我的c代码丢弃来自特定ipaddress的数据包。 这就是为什么我必须根据给定的输入使用iptables命令。 是否可以使用c代码调用命令? 如果它是如何??? 提前谢谢..

2 个答案:

答案 0 :(得分:2)

假设您的程序以root身份运行,只需使用fork()和exec(),并将iptables命令传递给exec()。像

这样的东西
if (0 == fork()) {
    execl("/sbin/iptables", ...); // supply the proper arguments to iptables.
}

编辑:我从其他人那里看到system()比fork / exec更好。

听起来Neha不确定如何使用sprintf格式化命令,使其包含存储在其他变量中的IP地址。我认为它应该是这样的:

char *host_to_block = ....
char comm[1000];
snprintf(comm, sizeof(comm), "iptables -A INPUT -s %s -j DROP", host_to_block);
system(comm);

请注意,这将是安全漏洞,除非您有代码验证host_to_block是否包含IP地址而不包含其他shell命令。如果字符串的来源尚未知有效,您可能需要使用以下问题作为参考:

how to validate an ip address

答案 1 :(得分:1)

可以在不使用system()或exec *()系列命令的情况下执行此操作,但我确信您也对实际完成项目感兴趣:)

但是,如果您只需要程序中iptables的非常基本的功能,或者需要精确的错误处理,那么您可以获得iptables包的来源。

高级警告:研究iptables ioctl钩子和相应的netfilter模块已知是一个精神液化任务。