0

我设计了一个简单的c代码来根据需要调用iptables命令。我只想使用我的 c 代码从特定的 IP 地址丢弃数据包。这就是为什么我必须根据给定的输入使用 iptables 命令。是否可以使用c代码调用命令?如果是那怎么办???提前致谢..

4

2 回答 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 命令。如果不知道字符串的来源是否有效,您可能希望使用以下问题作为参考:

如何验证IP地址

于 2010-03-20T04:32:15.573 回答
1

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

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

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

于 2010-03-20T06:04:27.207 回答