【发布时间】:2013-11-26 04:03:46
【问题描述】:
问题:有什么方法可以找出 D-Bus 接口中公开的方法(及其签名)?
问题描述:在我的手机中,我使用 D-Bus 到适配器接口调用 BlueZ 方法,当在手机 2 上检查时,这些方法不可用。
目的是检查方法名称/签名是否在其他设备中被修改,我无权访问代码,因此希望在接口中找到方法
【问题讨论】:
问题:有什么方法可以找出 D-Bus 接口中公开的方法(及其签名)?
问题描述:在我的手机中,我使用 D-Bus 到适配器接口调用 BlueZ 方法,当在手机 2 上检查时,这些方法不可用。
目的是检查方法名称/签名是否在其他设备中被修改,我无权访问代码,因此希望在接口中找到方法
【问题讨论】:
使用 dbus-send,您可以列出系统上可用的服务:
会话:
dbus-send --session \
--dest=org.freedesktop.DBus \
--type=method_call \
--print-reply \
/org/freedesktop/DBus \
org.freedesktop.DBus.ListNames
系统:
dbus-send --system \
--dest=org.freedesktop.DBus \
--type=method_call \
--print-reply \
/org/freedesktop/DBus \
org.freedesktop.DBus.ListNames
你会得到这样的答案:
array [
string "org.freedesktop.DBus"
string ":1.1"
string ":1.26"
string "org.asamk.Signal"
]
如果您想列出 dbus 服务背后的所有可用方法,您仍然可以使用 dbus-send 来内省 dbus 服务。
例如org.asamk.Signal:
dbus-send --system --type=method_call --print-reply \
--dest=org.asamk.Signal \
/org/asamk/Signal \
org.freedesktop.DBus.Introspectable.Introspect
你会得到这种结果(截断)
<node name="/org/asamk/Signal">
<interface name="org.asamk.Signal">
<method name="sendMessage" >
...parameters
</method>
<method name="sendGroupMessage" >
...parameters
</method>
</interface>
</node>
这里有2个方法,sendMessage和sendGroupMessage
【讨论】:
你也可以看看D-Feet。
【讨论】:
通过额外的 google 搜索和 dbus 理解,使用 D-Bus Introspection 有助于在该特定接口上公开方法(带有签名)。更多信息请访问link。
【讨论】: