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

发布于 2024-08-26 02:19:12 字数 135 浏览 11 评论 0原文

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

i m designing a simple c code to call the iptables command according to the need.
i just want to drop the packets from a particular ipaddress using my c code.
thats why i have to use the iptables command according to input given.
is it possible to call the command using c code?
if it is then how???
thanks in advance..

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夕嗳→ 2024-09-02 02:19:12

假设您的程序以 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 地址

Assuming that your program is running as root, just use fork() and exec(), and pass the iptables command to exec(). Something like

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

Edit: I see from other people that system() is a better way than fork/exec.

It sounds like Neha is not sure how to use sprintf to format the command so that it contains an IP address which is stored in some other variable. I think it should look like this:

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

Note that this will be a security vulnerability unless you have code to verify that host_to_block contains an IP address and not some other shell command. You may want to use the following question for reference if the source of the string is not already known to be valid:

how to validate an ip address

白云悠悠 2024-09-02 02:19:12

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

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

高级警告:研究 iptables ioctl 挂钩和相应的 netfilter 模块已知是一项费力的任务。

It is possible to do this without using the system() or exec*() family of commands, however I'm sure that you are also interested in actually completing your project :)

If, however you only need very rudimentary functionality from iptables within your program, or need precision error handling, you can obtain the source to the iptables package.

Advanced warning: studying the iptables ioctl hooks and the corresponding netfilter modules is known to be a mind liquefying task.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文