【问题标题】:How to check if a server support xmpp protocol?如何检查服务器是否支持 xmpp 协议?
【发布时间】:2009-07-07 16:17:04
【问题描述】:

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

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

【问题讨论】:

    标签: dns xmpp srv


    【解决方案1】:

    大多数 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">
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 哇,感谢您的快速回复:) 我忘了提到我正在寻找一种自动方式。此检查将在我的应用中定期执行。
        猜你喜欢
        • 1970-01-01
        • 2014-09-04
        • 1970-01-01
        • 1970-01-01
        • 2011-02-21
        • 2017-07-21
        • 2021-05-11
        • 2019-06-03
        相关资源
        最近更新 更多