Iptables С++ control

Мне нужно управлять входящим и исходящим трафиком в/из окна Linux из программы С++. Я мог бы вызвать iptables из моей программы, но я бы скорее вырезал среднего человека и сам получил доступ к функциям API ядра.

Я считаю, что мне нужно использовать libnfnetlink, однако мне не удалось найти какую-либо документацию API или примеры программ.

Правила, которые мне нужно построить, довольно просты - такие вещи, как удаление пакетов с портом назначения, равным X и т.д. Я НЕ собираюсь писать полное приложение брандмауэра.

может ли кто-нибудь предложить лучший подход или предоставить ссылку на некоторые документы или примеры приложений? Я бы предпочел не читать код iptables, но, я думаю, мне, возможно, придется, если я не могу найти лучшие ресурсы.

Ответ 1

В прошлом году у меня было одно и то же требование и исследовали вокруг. Но после обращения к некоторым парням с открытым исходным кодом это то, что я узнал -

API-интерфейсы ядра iptables не являются внешними, что означает, что они не документированы API. В этом смысле API могут меняться в любой момент. Они должны использоваться только инструментом iptables. они не должны использоваться разработчиками приложений.

-satish

Ответ 2

Обычно вам не нужно регулярно менять правила IP-таблиц (т.е. часто во время выполнения). Поэтому вызов /sbin/iptables должен быть точным.

Если вы пытаетесь это сделать, вероятно, вам нужно взглянуть на альтернативный матч или целевой модуль, который содержит свой собственный интеллект, или использовать NFQUEUE для очереди пакетов в программу пользовательского пространства, которая может принять собственное решение на основе критерии, которые могут меняться так часто, как нравится (остерегайтесь отправки слишком большого количества пакетов в пользовательское пространство, это потенциальная проблема с производительностью)

Ответ 3

Почему бы просто не получить источник для iptables и сделать это, как они это делают? Так как это с открытым исходным кодом....