【问题标题】:D-Bus API or C library to control firewalld用于控制防火墙的 D-Bus API 或 C 库
【发布时间】:2018-08-27 23:11:13
【问题描述】:

我正在做一个项目,用 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 吗?
    • 如果可以,该怎么做以及使用什么? libdbusGDBus 有相对较好的文档,尽管 libdbus 需要大量的努力。他们甚至在文档中说“如果你直接使用这个低级 API,你注册会很痛苦。”。在任何情况下,我都需要示例或任何类型的文本来展示它们的用法。

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

【问题讨论】:

    标签: c embedded-linux dbus gdbus firewalld


    【解决方案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:使用它可能需要一些专业知识(完全取决于你需要做什么)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-04
      • 2011-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-04
      相关资源
      最近更新 更多