如何在 ejabberd/XMPP 中获取所有在线用户的列表?

Posted

技术标签:

【中文标题】如何在 ejabberd/XMPP 中获取所有在线用户的列表?【英文标题】:How do I get a list of all online users in ejabberd/XMPP? 【发布时间】:2012-03-07 22:23:21 【问题描述】:

假设我是管理员并且 XEP-133 不起作用并且我不在他们的名单中,我如何在 XMPP 中获取所有在线用户的列表?

【问题讨论】:

【参考方案1】:

XEP-133 中的大多数命令确实可以在 ejabberd 上正常工作。

关于某些特定命令不起作用,包括获取在线用户,您确实是对的:我发现虽然有特定于 ejabberd 的非标准替代方案:

如果您在主机上运行disco#items,您会得到一些可以查询的有趣项目:

<iq to="localhost" type="get" id="123">
    <query xmlns='http://jabber.org/protocol/disco#items' />
</iq>


<iq from="localhost" type="result" to="admin@localhost/jarnas" id="123">
    <query xmlns="http://jabber.org/protocol/disco#items">
        <item jid="conference.localhost" />
        <item jid="pubsub.localhost" />
        <item jid="riot.localhost" />
        <item jid="vjud.localhost" />
        <item node="announce" name="Announcements" jid="localhost" />
        <item node="config" name="Configuration" jid="localhost" />
        <item node="user" name="User Management" jid="localhost" />
        <item node="online users" name="Online Users" jid="localhost" />
        <item node="all users" name="All Users" jid="localhost" />
        <item node="outgoing s2s" name="Outgoing s2s Connections" jid="localhost" />
        <item node="running nodes" name="Running Nodes" jid="localhost" />
        <item node="stopped nodes" name="Stopped Nodes" jid="localhost" />
    </query>
</iq>

现在,如果您需要“在线用户”,那么:

<iq to="localhost" type="get" id="234">
    <query xmlns='http://jabber.org/protocol/disco#items' node="online users"/>
</iq>

<iq from="localhost" type="result" to="admin@localhost/jarnas" id="234" >
    <query xmlns="http://jabber.org/protocol/disco#items" node="online users" >
        <item name="admin@localhost" jid="admin@localhost/auto-CdB67NUOie" />
        <item name="admin@localhost" jid="admin@localhost/jarnas" />
    </query>
</iq>

会像魅力一样工作;)

【讨论】:

嗯,答应明天调查一下。票是旧的,我至少可以确定您可以获得注册用户列表,因为我在一个项目中这样做。会回来的! 非常感谢! :) 不幸的是,我的项目必须在 php 中 :( 而且它是由于星期六。:( (已经尝试了一个多星期了)。 你去!使用 ejabberd 的非标准方式;) 如果请求用户是管理员,这将非常有用。我可以在某处更改此查询请求的权限吗?也许是 ejabberd.cfg? @MarkMolina 我不这么认为。你应该做不到。

以上是关于如何在 ejabberd/XMPP 中获取所有在线用户的列表?的主要内容,如果未能解决你的问题,请参考以下文章

Python 和 EJABBERD/XMPP [关闭]

不允许任何所有者撤销创建房间/MUC 的用户的所有权 - Ejabberd XMPP

ejabberd xmpp 连接未维护

我们如何将图像或照片上传到 ejabberd XMPP Web 服务器?

查看发布到 ejabberd xmpp 节点的消息

Ubuntu安装ejabberd xmpp服务器