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