答案 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命令。如果字符串的来源尚未知有效,您可能需要使用以下问题作为参考:
答案 1 :(得分:1)
可以在不使用system()或exec *()系列命令的情况下执行此操作,但我确信您也对实际完成项目感兴趣:)
但是,如果您只需要程序中iptables的非常基本的功能,或者需要精确的错误处理,那么您可以获得iptables
包的来源。
高级警告:研究iptables ioctl钩子和相应的netfilter模块已知是一个精神液化任务。