Como verificar se um protocolo XMPP suporte do servidor?
Pergunta
Eu estou procurando uma maneira de verificar se um servidor é o suporte de protocolo XMPP, ou seja, xmpp-servidor está em execução neste domínio.
verificação DNS Talvez especial ou algo assim?
Solução
A maioria dos servidores XMPP deve suportar pelo menos um destes registros do servidor DNS:
- _xmpp-server._tcp .
example.com
- _xmpp-client._tcp .
example.com
Alguns servidores não pode ter esses registros publicados, mas a maioria das pessoas não vai querer falar com o mundo exterior. Como exemplo, você pode usar "cavar" na linha de comando para verificar um domínio, como este:
% 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" se livrar de um monte de detalhes de DNS, "SRV -t" diz que quer registros SRV, eo ponto no final diz para ignorar suas configurações de nome de domínio locais.
(adicionando em resposta a @ user188719) Se você não encontrar um registro SRV, você pode tentar usar o nome de domínio original, e assumindo a porta 5222 para conexões de cliente ou 5269 para conexões de servidor.
Uma vez que você tem o nome do host eo número da porta para conectar-se, você pode usar telnet hostname port
para ver se há um processo de escuta lá. No entanto, para realmente detectar se é um servidor XMPP naquele host / port, send no início de um fluxo de XMPP. nc
ou netcat
fornecer um mecanismo conveniente para isso. Exemplo para uma verificação de servidor para servidor:
% 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">
Outras dicas
A seguir explicação de Joe, Eu, pessoalmente, gostaria de verificar registros SRV e cair de volta para um rápido (curto timeout) de verificação de conexão na porta 5269. Em seguida, armazenar em cache o resultado.
Você pode tentar IMtrends: http://www.process-one.net/en / imtrends /