【发布时间】:2012-10-03 07:55:35
【问题描述】:
我想从 C 程序中将 IP 添加到 IPFW 中的表中。我不想调用 system() 因为这段代码必须尽可能高效。所以基本上我的问题是,有人可以解释这是如何工作的吗?由于没有可以使用的 API,我正在查看源代码(以查看添加的完成方式),但这需要的时间比预期的要长,如果可能的话,如果有人解释一下,那就太好了。
所以我想做的是当我收到来自客户端的连接时,我想将该客户端的 IP 地址放在某个表中。
提前致谢!
【问题讨论】:
我想从 C 程序中将 IP 添加到 IPFW 中的表中。我不想调用 system() 因为这段代码必须尽可能高效。所以基本上我的问题是,有人可以解释这是如何工作的吗?由于没有可以使用的 API,我正在查看源代码(以查看添加的完成方式),但这需要的时间比预期的要长,如果可能的话,如果有人解释一下,那就太好了。
所以我想做的是当我收到来自客户端的连接时,我想将该客户端的 IP 地址放在某个表中。
提前致谢!
【问题讨论】:
这不是一个真正的答案,只是一个明显的建议。用 cvsup 查看系统的源代码。然后查找 ipfw.c ,在那里您将看到它用于修改规则的系统调用。 ipfw 程序是一个命令行工具,所以它必须在用户空间中。这意味着你必须能够做它所做的事情。 (尽管您必须拥有超级用户权限。)
【讨论】:
好的。所以我找到了解决方案。
在 ip_fw.h 中有一个结构 - ipfw_table_entry
代码如下所示:
...
ipfw_table_entry entry;
bzero(&entry, sizeof entry);
entry.addr = inet_addr("192.168.1.0");
entry.tbl = 100;
entry.masklen = 32;
setsockopt(ipfw_socket, IPPROTO_IP, IP_FW_TABLE_ADD, &entry, sizeof entry);
【讨论】: