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

3
我正在寻找一种方法来检查服务器是否支持xmpp协议,即xmpp服务器是否在该域上运行。也许可以进行特殊的DNS检查或类似的操作?
3个回答

6

大多数XMPP服务器应至少支持以下一种DNS SRV记录:

  • _xmpp-server._tcp.example.com(XMPP服务器地址)
  • _xmpp-client._tcp.example.com(XMPP客户端地址)

有些服务器可能没有发布这些记录,但其中大多数不希望与外部世界通信。例如,您可以在命令行上使用“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 主机名 端口号 查看是否有进程在监听。但是,为了真正检测到该主机/端口上是否为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">

2

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


0

哇,谢谢你非常快的回复 :) 我忘了提到我正在寻找一种自动的方式。 这个检查将定期在我的应用程序中执行。 - Anton Mironov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接