D-Bus API 或 C 库来控制 firewalld
D-Bus API or C library to control firewalld
我正在做一个项目,用 C 语言实现所有内容。作为项目的一部分,我们需要能够控制和配置当前系统的防火墙firewalld
。
firewalld
在Python实现,有接口可用。但是,我们不想从 C 进行 Python 调用,反之亦然。
- 有命令行工具可以配置
firewalld
(例如 firewall-cmd
),但我们也不想从 C 中进行此类调用。
我最近开始研究firewalld
,我不太了解它的内部结构。我看过它使用D-Bus,我对D-Bus也不是很了解
- 有一个由 Thomas Woerner 开发的 C 库:
libfirewall
。
然而,距离上次提交已经一年半多了,所以它没有被维护。除了 libfirewall
,我不知道 C 中的任何 firewalld 接口。
- 我试了一下
libfirewall
。它在编译和 运行 示例时给我带来了一些问题,我仍然有问题需要解决。 libfirewall
值得继续吗?我应该使用它吗?
- 还有其他我不知道的界面吗?
- 可能由于缺乏对 D-Bus 的理解而提出的幼稚问题: 我想,也许,通过 D-Bus 接口,我可以向 firewalld 发出命令。可以吗? (即 D-Bus 是这样工作的吗?)我们能否编写一个程序来模仿,比如
firewall-cmd
,并以相同的方式与 D-Bus 交互,最后允许我们控制 firewalld?
- 如果可以,怎么做,用什么?
libdbus
和 GDBus
有相对较好的文档,尽管 libdbus
需要大量的努力。他们甚至在文档中说 "If you use this low-level API directly, you're signing up for some pain." 。无论如何,我都需要示例或任何类型的文本来展示它们的用法。
我该如何解决这个问题?
是的,您可以通过 D-Bus 向 firewalld 发出命令。我没有检查过,但预计 firewall-cmd
本身是作为 D-Bus 客户端实现的。
D-Bus API 被广泛记录:https://firewalld.org/documentation/man-pages/firewalld.dbus.html。文档应该让您大致了解可以通过 API 完成什么。您可以尝试 D-Bus 调试器 d-feet
无需任何代码即可与 firewalld 交互。
GDBus 绝对是从 C 使用 D-Bus 的最简单方法,但它仍然不是微不足道的,而且 firewalld 相当复杂 API:使用它可能需要一些专业知识(完全取决于您需要做什么) .
我正在做一个项目,用 C 语言实现所有内容。作为项目的一部分,我们需要能够控制和配置当前系统的防火墙firewalld
。
firewalld
在Python实现,有接口可用。但是,我们不想从 C 进行 Python 调用,反之亦然。- 有命令行工具可以配置
firewalld
(例如firewall-cmd
),但我们也不想从 C 中进行此类调用。
我最近开始研究firewalld
,我不太了解它的内部结构。我看过它使用D-Bus,我对D-Bus也不是很了解
- 有一个由 Thomas Woerner 开发的 C 库:
libfirewall
。 然而,距离上次提交已经一年半多了,所以它没有被维护。除了libfirewall
,我不知道 C 中的任何 firewalld 接口。- 我试了一下
libfirewall
。它在编译和 运行 示例时给我带来了一些问题,我仍然有问题需要解决。libfirewall
值得继续吗?我应该使用它吗? - 还有其他我不知道的界面吗?
- 我试了一下
- 可能由于缺乏对 D-Bus 的理解而提出的幼稚问题: 我想,也许,通过 D-Bus 接口,我可以向 firewalld 发出命令。可以吗? (即 D-Bus 是这样工作的吗?)我们能否编写一个程序来模仿,比如
firewall-cmd
,并以相同的方式与 D-Bus 交互,最后允许我们控制 firewalld?- 如果可以,怎么做,用什么?
libdbus
和GDBus
有相对较好的文档,尽管libdbus
需要大量的努力。他们甚至在文档中说 "If you use this low-level API directly, you're signing up for some pain." 。无论如何,我都需要示例或任何类型的文本来展示它们的用法。
- 如果可以,怎么做,用什么?
我该如何解决这个问题?
是的,您可以通过 D-Bus 向 firewalld 发出命令。我没有检查过,但预计 firewall-cmd
本身是作为 D-Bus 客户端实现的。
D-Bus API 被广泛记录:https://firewalld.org/documentation/man-pages/firewalld.dbus.html。文档应该让您大致了解可以通过 API 完成什么。您可以尝试 D-Bus 调试器 d-feet
无需任何代码即可与 firewalld 交互。
GDBus 绝对是从 C 使用 D-Bus 的最简单方法,但它仍然不是微不足道的,而且 firewalld 相当复杂 API:使用它可能需要一些专业知识(完全取决于您需要做什么) .