我设计了一个简单的c代码来根据需要调用iptables命令。我只想使用我的 c 代码从特定的 IP 地址丢弃数据包。这就是为什么我必须根据给定的输入使用 iptables 命令。是否可以使用c代码调用命令?如果是那怎么办???提前致谢..
问问题
3264 次
2 回答
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 命令。如果不知道字符串的来源是否有效,您可能希望使用以下问题作为参考:
于 2010-03-20T04:32:15.573 回答
1
可以在不使用 system() 或 exec*() 系列命令的情况下执行此操作,但是我相信您也有兴趣实际完成您的项目 :)
但是,如果您只需要程序中 iptables 的非常基本的功能,或者需要精确的错误处理,您可以获取iptables
包的源代码。
高级警告:已知研究 iptables ioctl 钩子和相应的 netfilter 模块是一项思维液化任务。
于 2010-03-20T06:04:27.207 回答