FreeBSD IPFW为表添加IP

时间:2012-10-03 07:55:35

标签: c sockets freebsd ipfw

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

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

提前致谢!

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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);