【问题标题】:Accessing Avahi through dbus-send通过 dbus-send 访问 Avahi
【发布时间】:2022-05-12 01:04:04
【问题描述】:

在使用dbus-monitor 进行黑客攻击的过程中,我尝试连接到 Avahi 守护进程:

$ dbus-monitor --system \
  "type='signal',interface='org.freedesktop.Avahi.Server',member='StateChanged'"

这将响应 Avahi 守护程序状态的变化。

$ sudo restart avahi-daemon

signal sender=org.freedesktop.DBus -> 
         dest=:1.315 
         serial=2
         path=/org/freedesktop/DBus;
         interface=org.freedesktop.DBus;
         member=NameAcquired
    string ":1.315"

signal sender=:1.318 ->
         dest=(null destination)
         serial=4
         path=/;
         interface=org.freedesktop.Avahi.Server; 
         member=StateChanged
    int32 1
    string "org.freedesktop.Avahi.Success"

signal sender=:1.318 -> 
         dest=(null destination)
         serial=13
         path=/;
         interface=org.freedesktop.Avahi.Server;
         member=StateChanged
    int32 2
    string "org.freedesktop.Avahi.Success"

但是,我无法浏览这样的服务。

$ dbus-send --system --dest=org.freedesktop.Avahi --print-reply \
    / org.freedesktop.Avahi.Server.ServiceBrowserNew \
    int32:-1 int32:-1 string:'_http._tcp' string:'local' uint32:0

method return sender=:1.345 -> 
         dest=:1.354
         reply_serial=2
    object path "/Client5/ServiceBrowser1"

$ dbus-monitor --system \
    "type='signal',interface='org.freedesktop.Avahi.ServiceBrowser'"

据我了解,这应该响应新的/删除的 http 服务 实例,但事实并非如此。

为什么?

更新:

使用 python 和 c API 执行与上述 shell 命令等效的命令 按预期工作。但是,他们无法连接到我的 ServiceBrowser 使用dbus-send 构建,我无法使用dbus-monitor 收听 到他们构建的 ServiceBrowser。

在这一点上,我最好的猜测是:

  1. 一旦连接关闭(通过dbus-send 命令的终止), 我创建的 ServiceBrowser 被销毁。然而这并不能解释为什么 dbus-monitor 无法连接到处于活动状态的 ServiceBrowser 与我的 python 脚本通信。
  2. 来自 ServiceBrowser 的信号仅发送到连接 实例化它们。

【问题讨论】:

  • 如果你从 python 创建浏览器然后执行dbus-monitor --system \ "type='signal',interface='org.freedesktop.Avahi.ServiceBrowser'" 会发生什么?据我所知,avahi 不知道客户端何时关闭连接(释放浏览器是客户端的责任)。此外,信号消息被发送到总线,ind dbus-daemon 将其发送给订阅者 - 据我所知 1 和 2 不正确
  • 我在 avahi 周围有 node.js 包装器 - 可能有助于调试您的问题 - github.com/sidorares/node-gday/blob/master/examples/…
  • 在 Python 或 C 中创建的浏览器无法通过 dbu-monitor 访问。我已经有了这些语言的工作代码,所以这个问题更多的是关于好奇心而不是修复错误。我希望 shell 黑客是一个简单的第一步,但我对 DBus 的理解是不完整的。我如何使用node-gday 来回答我的问题?

标签: dbus avahi


【解决方案1】:

我认为问题是由 dbus 政策引起的。 尝试像这样更改/etc/dbus-1/system.d/avahi-dbus.conf 中的 avahi dbus 策略(记得重启 avahi 守护进程):

<busconfig>

  <policy context="default">
    <!-- All messages may be received by default -->
    <allow receive_requested_reply="false" receive_type="method_call" eavesdrop="true"/>
    <allow receive_requested_reply="false" receive_type="method_return" eavesdrop="true"/>
    <allow receive_requested_reply="false" receive_type="error" eavesdrop="true"/>
    <allow receive_requested_reply="false" receive_type="signal" eavesdrop="true"/>
    <allow eavesdrop="true"/>
  </policy>
  <policy user="root">
      <allow send_destination="*" eavesdrop="true"/>
      <allow receive_sender="*" eavesdrop="true"/>
  </policy>
</busconfig>

并使用root权限运行dbus-monitor:

sudo dbus-monitor --system \
    "type='signal',interface='org.freedesktop.Avahi.ServiceBrowser'"

参考:http://blog.nutsfactory.net/2011/03/08/test-and-debug-dbus/

【讨论】:

    猜你喜欢
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 2016-07-10
    • 2016-04-13
    • 2015-02-28
    • 2011-04-11
    • 2021-09-29
    • 2014-09-02
    相关资源
    最近更新 更多