D-Bus API或C库控制防火墙

时间:2018-08-27 23:11:14

标签: c embedded-linux dbus gdbus firewalld

我正在一个项目中,用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界面,我可以向防火墙发出命令。能做到吗(即D-Bus是否能那样工作?)我们可以编写一个模仿firewall-cmd并与D-Bus交互并以相同方式进行交互并最终允许我们控制防火墙的程序吗?
    • 如果可能的话,该怎么做以及使用什么?尽管GDBus需要付出很多努力,但libdbuslibdbus的文档还是比较完善的。他们甚至在文档中说“如果您直接使用此低级API,您会感到有些痛苦。” 。无论如何,我都需要示例或任何形式的文本来说明其用法。

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

1 个答案:

答案 0 :(得分:1)

是的,您可以通过D-Bus向防火墙发出命令。我尚未检查,但希望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:使用它可能需要一些专业知识(完全取决于您需要做什么)。