FreeBSD IPFW добавляет IP в таблицу
Я хочу добавить IP к таблице в IPFW изнутри программы на C. Я не хочу вызывать system(), так как этот код должен быть максимально эффективным. В общем, мой вопрос: может кто-нибудь объяснить, как это работает? Поскольку нет API, который можно использовать, я рассматриваю источник (чтобы увидеть, как происходит добавление), но это занимает больше времени, чем ожидалось, и, если возможно, было бы здорово, если бы кто-то объяснил это.
Так что я пытаюсь сделать, когда я получаю соединение от клиента, я хочу поместить IP-адрес этого клиента в определенную таблицу.
Заранее спасибо!
2 ответа
ХОРОШО. Итак, я нашел решение.
Для этого в 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);
Это не реальный ответ, а очевидное предложение. Проверьте исходный код системы с помощью cvsup. Затем найдите ipfw.c и там вы увидите, какие системные вызовы он использует для изменения правил. Программа ipfw - это инструмент командной строки, поэтому она должна находиться в пользовательской среде. Это означает, что вы должны быть в состоянии сделать то, что он делает. (Хотя вы должны будете иметь привилегии суперпользователя.)