Pregunta

Estoy buscando una manera de comprobar si un servidor es el protocolo XMPP apoyo, es decir, XMPP-servidor se ejecuta en este dominio.

Tal comprobación DNS especial o algo por el estilo?

¿Fue útil?

Solución

La mayoría de servidores XMPP deben soportar al menos uno de estos registros SRV de DNS:

  • _xmpp-server._tcp .example.com
  • _xmpp-client._tcp .example.com

Algunos servidores pueden no tener estos registros publicados, pero la mayoría de las personas no querrán hablar con el mundo exterior. A modo de ejemplo, puede utilizar "cavar" en la línea de comandos para comprobar un dominio, por ejemplo:

% 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 deshace de una gran cantidad de datos DNS, "-t SRV" dice que queremos registros SRV, y el punto al final dice ignorar la configuración de nombre de dominio local.

(añadiendo en respuesta a @ user188719) Si no encuentra un registro SRV, puede probar a usar el nombre de dominio original, y suponiendo que el puerto 5222 para conexiones de cliente o 5269 para las conexiones del servidor.

Una vez que tenga el nombre de host y el número de puerto para conectarse a, puede utilizar telnet hostname port para ver si hay un proceso de escuchar allí. Sin embargo, para detectar realmente si se trata de un servidor XMPP en ese host / puerto, enviar en el inicio de una corriente de XMPP. nc o netcat proporcionan un mecanismo conveniente para esto. Ejemplo para un cheque de servidor a 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">

Otros consejos

Tras la explicación de Joe, yo personalmente comprobar los registros SRV y caer de nuevo a una rápida (tiempo de espera corto) conectar cheque en el puerto 5269. A continuación, almacenar en caché el resultado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top