Domanda

Sto cercando un modo per verificare se un server è il supporto del protocollo XMPP, vale a dire XMPP-server è in esecuzione su questo dominio.

Forse speciale di controllo DNS o qualcosa del genere?

È stato utile?

Soluzione

La maggior parte dei server XMPP dovrebbero sostenere almeno uno di questi record SRV DNS:

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

Alcuni server potrebbero non avere questi record pubblicati, ma la maggior parte di coloro che non vorranno parlare con il mondo esterno. A titolo di esempio, è possibile utilizzare "scavare" sulla riga di comando per controllare un dominio, in questo modo:

% 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.

"+ corto" si libera di un sacco di dettagli DNS, "-t SRV" dice che vogliamo record SRV, e il punto alla fine dice di ignorare le impostazioni del nome di dominio locale.

(aggiungendo in risposta a @ user188719) Se non si trova un record SRV, è possibile provare a utilizzare il nome di dominio originale, e assumendo la porta 5222 per le connessioni client o 5269 per le connessioni al server.

Una volta che hai il nome host e il numero di porta per la connessione, è possibile utilizzare telnet hostname port per vedere se c'è un processo di ascolto lì. Tuttavia, per rilevare in realtà se si tratta di un server XMPP in quel host / port, inviare l'inizio di un flusso XMPP. nc o netcat fornire un comodo meccanismo per questo. Esempio per un controllo server-to-server:

% 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">

Altri suggerimenti

Dopo la spiegazione di Joe, io personalmente controllare i record SRV e ripiegare ad una rapida (breve timeout) la connessione di controllo sulla porta 5269. Poi in cache il risultato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top