0

我正在做一个项目,用 C 语言实现一切。作为项目的一部分,我们需要能够控制和配置firewalld当前系统的防火墙。

  • firewalld是用 Python 实现的,并且有一个接口可用。但是,我们不想从 C 进行 Python 调用,反之亦然。
  • 有命令行工具可以配置firewalld(例如firewall-cmd),但我们也不想从 C 中进行此类调用。

我最近开始工作firewalld,我不太了解它的内部结构。我读过它使用 D-Bus,我对 D-Bus 也不太了解。

  • Thomas Woerner 开发了一个 C 库:libfirewall. 但是,距离上次提交已经超过一年半,因此没有维护。除此之外libfirewall,我不知道 C 中的任何防火墙接口。
    • 我试libfirewall了一下。在编译和运行示例时,它给我带来了一些问题,我仍然有问题需要解决。值得继续libfirewall吗?我应该使用它吗?
    • 还有其他我不知道的界面吗?
  • 由于对 D-Bus 缺乏了解,可能是一个幼稚的问题:我想,也许,通过 D-Bus 接口,我可以向 firewalld 发出命令。可以做到吗?(即 D-Bus 是否像那样工作?)我们可以编写一个程序来模仿,比如说firewall-cmd,并以相同的方式与 D-Bus 交互并最终允许我们控制 firewalld 吗?
    • 如果这是可能的,该怎么做以及使用什么?libdbus并且GDBus有相对较好的文档,虽然libdbus需要大量的努力。他们甚至说“如果你直接使用这个低级 API,你注册会有些痛苦。” 在文档中。在任何情况下,我都需要示例或任何类型的文本来展示它们的用法。

我应该如何解决这个问题?

4

1 回答 1

1

是的,您可以通过 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:使用它可能需要一些专业知识(完全取决于你需要做什么)。

于 2018-08-28T17:06:53.490 回答