How to check if a server support xmpp protocol?

I'm looking for a way to check if a server is support xmpp protocol, i.e. xmpp-server is running on this domain.

Maybe special DNS check or something like that?


Solution 1:

The main default port for non-SSL jabber is 5222. You could spit some xml at it using telnet and see if you get an XML response:

telnet suspectedServer 5222
<?xml version="1.0"?>  <stream:stream to="foo.com" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0"> 

This can of course be scripted for multiple servers and multiple ports, probably easier to script with nc (netcat).

For XMPP servers which require TLS connections, test with : -

openssl s_client -starttls xmpp -connect suspectedserver:5222

Solution 2:

If an XMPP server is configured to work with other XMPP servers, it is possible the domain would have an SRV record in DNS. For example:

$ dig _xmpp-server._tcp.google.com srv +short
20 0 5269 xmpp-server1.l.google.com.
20 0 5269 xmpp-server4.l.google.com.
20 0 5269 xmpp-server3.l.google.com.
5 0 5269 xmpp-server.l.google.com.
20 0 5269 xmpp-server2.l.google.com.

This is by no means a definitive way to find XMPP servers, since stand-alone sites most likely do not have this data in DNS. It is, however, a nicer way to find a jabber server, since the data is published and does not require any port probing. It is also defined in RFC 3920 (the XMPP protocol definition).