You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从外部查询XMPP服务器的品牌及版本信息

如何从外部查询XMPP服务器的品牌及版本信息

当然有办法啦!XMPP协议本身就提供了标准的方式来获取这类信息,主要靠两个核心扩展,我给你一步步讲清楚:

方法一:用软件版本查询(XEP-0092)

这是最直接的方式,专门用来获取软件的品牌和版本。你不需要登录服务器,只要发送一个简单的IQ请求就能拿到信息。

举个手动操作的例子(用telnet或者nc工具连接服务器的5222端口):

  1. 先建立连接:
    telnet your-xmpp-server.com 5222
    
  2. 发送初始化流请求:
    <stream:stream to='your-xmpp-server.com' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'>
    
  3. 等服务器返回流响应后,发送版本查询的IQ:
    <iq type='get' id='version-check-1'>
      <query xmlns='jabber:iq:version'/>
    </iq>
    
  4. 服务器的响应会类似这样:
    <iq type='result' id='version-check-1'>
      <query xmlns='jabber:iq:version'>
        <name>ejabberd</name>
        <version>23.01</version>
        <os>Linux</os>
      </query>
    </iq>
    
    这里的<name>就是服务器品牌,<version>就是具体版本号。

方法二:用服务发现(XEP-0030)

服务发现本来是用来查询服务器提供的功能和服务,但它的响应里也会包含服务器的身份信息,其中就有品牌和版本。

操作步骤和上面类似,在建立流之后,发送这个IQ请求:

<iq type='get' id='disco-check-1'>
  <query xmlns='http://jabber.org/protocol/disco#info'/>
</iq>

服务器响应里的<identity>元素会包含这些信息,比如:

<identity category='server' type='im' name='Prosody 0.12.4'/>

这里的name字段直接给出了品牌和版本。

注意事项

  • 有些服务器出于安全考虑,可能会禁用这些公开信息的返回,这时候你就拿不到啦,但大部分默认配置的XMPP服务器(比如ejabberd、Prosody)都会开放这些查询。
  • 如果你不想手动敲XML,也可以用现成的XMPP工具或者客户端(比如Gajim、Pidgin),在服务发现功能里直接查看服务器信息,不用自己写请求。

备注:内容来源于stack exchange,提问作者Max Muster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 12:59:30