如何检查服务器是否支持xmpp协议?

时间:2009-07-07 16:17:05

标签: dns xmpp srv

我正在寻找一种检查服务器是否支持xmpp协议的方法,即xmpp-server正在此域上运行。

也许特殊的DNS检查或类似的东西?

3 个答案:

答案 0 :(得分:6)

大多数XMPP服务器应至少支持其中一个DNS SRV记录:

  • _xmpp-server._tcp 即可。example.com
  • _xmpp-client._tcp 即可。example.com

某些服务器可能没有发布这些记录,但大多数服务器都不想与外界交谈。例如,您可以在命令行上使用“dig”来检查域,如下所示:

% dig +short -t SRV _xmpp-server._tcp.gmail.com.
20 0 5269 xmpp-server2.l.google.com.
20 0 5269 xmpp-server3.l.google.com.
20 0 5269 xmpp-server4.l.google.com.
5 0 5269 xmpp-server.l.google.com.
20 0 5269 xmpp-server1.l.google.com.

“+ short”摆脱了大量的DNS细节,“-t SRV”表示我们需要SRV记录,最后的点表示忽略您的本地域名设置。

(添加以响应@ user188719) 如果找不到SRV记录,可以尝试使用原始域名,并假设端口5222用于客户端连接,或5269用于服务器连接。

获得要连接的主机名和端口号后,您可以使用telnet hostname port查看是否有进程正在侦听。但是,要真正检测它是否是该主机/端口上的XMPP服务器,请发送XMPP流的开头。 ncnetcat为此提供了便利的机制。服务器到服务器检查的示例:

% echo "<stream:stream to='gmail.com' version='1.0' xmlns='jabber:server' xmlns:stream='http://etherx.jabber.org/streams' xmlns:db='jabber:server:dialback'>" | nc xmpp-server.l.google.com 5269
<stream:stream id="0A44AFB86521393A" xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:server" xmlns:db="jabber:server:dialback">

答案 1 :(得分:2)

根据Joe的解释,我个人会检查SRV记录并回到端口5269上的快速(短暂超时)连接检查。然后缓存结果。

答案 2 :(得分:0)

您可以尝试IMtrends:http://www.process-one.net/en/imtrends/