我正在寻找一种方法来检查服务器是否支持 xmpp 协议,即 xmpp-server 正在此域上运行。
也许特殊的DNS检查或类似的东西?
大多数 XMPP 服务器应至少支持以下 DNS SRV 记录之一:
example.com
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 流的开头发送。 nc
或netcat
为此提供方便的机制。服务器到服务器检查的示例:
% 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">
按照 Joe 的解释,我个人会检查 SRV 记录并回退到端口 5269 上的快速(短超时)连接检查。然后缓存结果。
您可以尝试 IMtrends: http: //www.process-one.net/en/imtrends/