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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top