я имел ввиду как на Си считывать правила файрволла, ну т.е. не через popen() юзая программку ipfw, а через сокет, пользуясь #include <ip_fw.h>, разобрался я кстати :), если
кому интересно вот код для считывания всех правил и вывода информации о байтах на на них набежавших, остальное в ipfirewall(4):
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip_fw.h>
#include <memory.h>
main() {
int s;
struct ip_fw *rules = NULL;
int nalloc = 0, nbytes = 0, num = 0, i = 0, unit = 0;
s = socket( AF_INET, SOCK_RAW, IPPROTO_RAW);
unit = sizeof(*rules);
while (num >= nalloc) {
nalloc = nalloc*2+200;
nbytes = nalloc*unit;
if ((rules = realloc(rules, nbytes)) == NULL) {printf("Can't reallocate memory\n"); exit(1);}
if (getsockopt(s, IPPROTO_IP, IP_FW_GET, rules, &nbytes) < 0) {printf("getsockopt(IP_FW_GET) not available"); exit(1);}
num = nbytes/unit;
}
for (i = 0; i < num; i++)
{
printf("Rule number=%-5d bytes=%-20d\n",rules[i].fw_number, rules[i].fw_bcnt);
}
}