【发布时间】: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。
在这一点上,我最好的猜测是:
- 一旦连接关闭(通过
dbus-send命令的终止), 我创建的 ServiceBrowser 被销毁。然而这并不能解释为什么dbus-monitor无法连接到处于活动状态的 ServiceBrowser 与我的 python 脚本通信。 - 来自 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来回答我的问题?