Я работаю над проектом, реализуя все на языке Си. В рамках проекта нам необходимо иметь возможность контролировать и настраивать firewalld
, брандмауэр текущей системы.
firewalld
реализован на Python и доступен интерфейс. Однако мы не хотим делать вызовы Python из C или наоборот.
- Существуют инструменты командной строки для настройки
firewalld
(например, firewall-cmd
), но мы также не хотим делать такие вызовы из C.
Я недавно начал работать над firewalld
, я не очень разбираюсь в его внутренностях. Я читал, что он использует D-Bus, я также мало что знаю о D-Bus.
- Существует библиотека C, разработанная Томасом Вернером:
libfirewall
.
Однако с момента последнего коммита прошло более полутора лет, поэтому он не поддерживается. Кроме libfirewall
, я не знаю никакого интерфейса firewalld в C.
- Я дал
libfirewall
выстрел. При компиляции и запуске примеров у меня возникли некоторые проблемы, и мне все еще нужно решить их. Стоит ли продолжать с libfirewall
? Должен ли я использовать это?
- Есть ли какой-нибудь другой интерфейс, о котором я не знаю?
- Возможно, наивный вопрос из-за непонимания D-Bus: Я подумал, может быть, с интерфейсом D-Bus я могу выдавать команды для firewalld. Это можно сделать? (Т.е. работает ли D-Bus именно так?) Можем ли мы написать программу, которая имитирует, скажем,
firewall-cmd
, и таким же образом взаимодействует с D-Bus и в конце позволяет нам управлять огненным миром?
- Если это возможно, как это сделать и что использовать?
libdbus
и GDBus
имеют относительно хорошую документацию, хотя libdbus
требует значительных усилий. Они даже сказали «Если вы используете этот низкоуровневый API напрямую, вы подписываетесь на некоторую боль». в документации. В любом случае мне понадобятся примеры или любой текст, демонстрирующий их использование.
Как мне подойти к этой проблеме?