如何从外部查询XMPP服务器的品牌及版本信息
如何从外部查询XMPP服务器的品牌及版本信息
当然有办法啦!XMPP协议本身就提供了标准的方式来获取这类信息,主要靠两个核心扩展,我给你一步步讲清楚:
方法一:用软件版本查询(XEP-0092)
这是最直接的方式,专门用来获取软件的品牌和版本。你不需要登录服务器,只要发送一个简单的IQ请求就能拿到信息。
举个手动操作的例子(用telnet或者nc工具连接服务器的5222端口):
- 先建立连接:
telnet your-xmpp-server.com 5222 - 发送初始化流请求:
<stream:stream to='your-xmpp-server.com' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'> - 等服务器返回流响应后,发送版本查询的IQ:
<iq type='get' id='version-check-1'> <query xmlns='jabber:iq:version'/> </iq> - 服务器的响应会类似这样:
这里的<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
相关产品推荐
相关产品推荐

