1

我想从 C 程序中将 IP 添加到 IPFW 中的表中。我不想调用 system() 因为这段代码必须尽可能高效。所以基本上我的问题是,有人可以解释这是如何工作的吗?由于没有可以使用的 API,我正在查看源代码(以查看添加是如何完成的),但这花费的时间比预期的要长,如果可能的话,如果有人解释这一点,那就太好了。

所以我想要做的是当我收到来自客户端的连接时,我想将该客户端的 IP 地址放在某个表中。

提前致谢!

4

2 回答 2

1

这不是一个真正的答案,只是一个明显的建议。用 cvsup 查看系统的源代码。然后查找 ipfw.c ,在那里您将看到它用于修改规则的系统调用。ipfw 程序是一个命令行工具,所以它必须在用户空间中。这意味着你必须能够做它所做的事情。(尽管您必须拥有超级用户权限。)

于 2012-10-03T07:59:01.097 回答
0

好的。所以我找到了解决方案。

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);
于 2012-10-08T07:42:15.697 回答