Enter a domain and pick a service, or paste a full _service._proto.domain name. You get the records, the host and port a client would really use, and — the part other lookup tools leave out — whether each target resolves at all.
A domain on its own sweeps the service names most domains publish. A full name such as _imaps._tcp.gmail.com is looked up exactly as typed.
Quick Answer: what does an SRV record lookup tell you?
An SRV record lookup returns the host and port a service lives on, plus a priority and a weight that decide which host clients try first. This checker goes one step further and resolves each target, because RFC 2782 requires the target to have an address record and not be an alias — and a record whose target no longer exists looks perfectly valid in every tool that only prints it.
Robert Harrison
OSINT & Network Utility Expert
Robert works on DNS, ports, certificates and the network utilities on this site, and writes the record-level tools.
This tool resolves every target because a survey run while building it, over 134 well-known domains and 359 real SRV records, found that 77 of those records pointed at a hostname that does not exist — and not one lookup tool on the first page of results mentions it. The matcher's arithmetic was checked against a second, independent implementation of RFC 2782's selection algorithm, and the packet reader against two DNS libraries that are not ours.
Last reviewed 27 September 2026 · Published 27 September 2026
View all articles by Robert HarrisonAn SRV record answers a question an A record cannot: which host and which port does this particular service live on? An A record maps a name to an address. A service record maps a service — mail submission, SIP, XMPP, Matrix federation, a game server — to a host, a port, a priority and a weight. That mechanism has a name: service discovery in DNS, and SRV is the record type that carries it. That is why an SRV record lookup is the first thing to run when a client cannot find a server it is supposed to discover automatically.
This SRV record checker does four separate things, and keeps the answers separate because they fail separately:
The rule the whole tool turns on. RFC 2782 says of the target: "There MUST be one or more address records for this name, the name MUST NOT be an alias (in the sense of [RFC 1034] or [RFC 2181])." A record that breaks that rule is still returned by DNS. It is still printed by every lookup tool. And it still cannot be used.
SRV is one record type among many. If you want the whole picture for a domain — A, AAAA, MX, TXT, NS, SOA, CNAME and CAA — our DNS lookup tool returns all of those in one pass, and this page stays out of its way by answering only the SRV question.
If the machinery underneath is what you are after rather than one record, the guide to how DNS resolves a domain name to an address walks through the whole journey from a client's question to an answer. Every record type on this page rides on that same process.
An SRV record lookup here returns four tiles rather than one verdict, because four different things can be wrong and a single pass-or-fail hides three of them. Read them left to right: the lookup, what is published, the targets, and what a client does with it.
| Tile | What it answers | What to do |
|---|---|---|
| The lookup | The DNS response code. NOERROR means the question was answered; NXDOMAIN means nothing exists at that name; SERVFAIL means the question could not be answered at all. | A SERVFAIL is a zone problem, not a record problem. Fix that first — nothing else on the page means anything until you do. |
| Published here | How many records, and whether they use more than one priority — which is what failover looks like in DNS. | One record means no failover. A second record at a higher priority number is the cheapest redundancy you can buy. |
| The targets | Whether each target host resolves, does not exist, exists with no address, is an alias, or is a single dot, which is a domain saying the service is deliberately not offered. | Anything red here is why your service is not connecting. Fix the target before you touch anything else. |
| A client would use | The host and port a client following RFC 2782 picks first, with the share each target gets. | If that is not the host you expected, your priorities and weights say something different from what you meant. |
Underneath, each finding carries a label saying where the rule comes from: RFC 2782 for the standard itself, vendor docs for something a service's own documentation specifies, DNS layer for the response code, and TrustMyIP view for our opinion. That last label matters. An opinion dressed as a standard is how checker tools teach people the wrong thing, so ours is labelled as an opinion.
The records above come from a recursive resolver, which is what a client would use — and which may be holding a copy that is minutes or hours old. So the tool then finds the zone's authoritative nameserver and asks it the same question directly, with recursion switched off, and compares the two answers. If they match, nothing you are reading is stale. If they differ, the resolver is holding an older copy, and the page says so rather than leaving you to guess.
That comparison is only made when the zone's own server really answered as the zone: the authoritative flag set, and a response code that is an answer rather than a failure. A server that refuses the question, or a network that quietly answers DNS on its behalf, proves nothing. A checker that treated either as a disagreement would be inventing a fault, so neither is counted.
Nothing here is scored. There is no grade, no percentage and no traffic light for the domain as a whole, because a domain that deliberately publishes no SRV records is not worse than one that does. The tool reports states, not marks.
More failed lookups come from the name than from the record. RFC 2782 defines the owner name as _Service._Proto.Name, and says the underscores exist "to avoid collisions with DNS labels that occur in nature". So the SRV record format for secure IMAP on example.com is _imaps._tcp.example.com, and the record itself carries four values:
# _Service._Proto.Name TTL class SRV priority weight port target
_imaps._tcp.example.com. 3600 IN SRV 10 5 993 mail.example.com.
# and the three ways to ask for it yourself
dig SRV _imaps._tcp.example.com +short
nslookup -type=srv _imaps._tcp.example.com
Resolve-DnsName _imaps._tcp.example.com -Type SRV
One detail worth knowing before you copy a name off this page: a DNS label may contain any octet, not only letters and digits. RFC 4343 puts it plainly — "the individual octets of which DNS names consist are not limited to valid ASCII character codes. They are 8-bit bytes, and all values are allowed." So this tool prints every name in the escaped form dig and a zone file use. An octet that is not a printable character appears as a back-slash and three digits — \032 for a space, say. The characters that are special in a master file are back-slashed too: a quote, a semicolon, an @, a dollar sign, brackets, and a dot inside a label. A name copied from here pastes straight into a zone file or into dig without changing meaning.
Three things bite people here:
_tcp and _udp are not interchangeable. A record published under one is completely invisible to a client asking under the other. SIP genuinely uses both, and they mean different transports._ldap._tcp.example.com but _ldap._tcp.dc._msdcs.example.com to find a domain controller, which is why a domain that looks empty from a plain lookup is full of records when you ask the right name. The service list in the tool builds these for you._IMAPS._TCP is the same name. An internationalised domain is a different matter: it has to be in its punycode form before you build the record name, because that is the only form DNS carries.These two fields are the reason SRV exists, and they do different jobs. Priority is failover. RFC 2782: a client "MUST attempt to contact the target host with the lowest-numbered priority it can reach". Lower number first; higher numbers are the standby that only gets traffic when everything above it is unreachable. Weight is load sharing, and it only counts between records that share a priority. The RFC's words: "Larger weights SHOULD be given a proportionately higher probability of being selected."
That is the same job a load balancer does, one layer up — the guide to virtual IPs and load balancing covers the server-side version. The difference is that with SRV the client does the balancing, which is cheap and has one sharp edge worth knowing about.
RFC 2782 does not just say "proportionately". It gives an algorithm: order the records with the weight-0 ones first, add the weights up, then "choose a uniform random number between 0 and the sum computed (inclusive)" and take the first record whose running total reaches it. That inclusive zero has a consequence nobody mentions. Running that algorithm 200,000 times per case while building this tool gave these results:
| Weights | Intended split | What the algorithm gives |
|---|---|---|
| 1 and 1 | 50% / 50% | 66.7% / 33.3% |
| 1 and 2 | 33% / 67% | 50% / 50% |
| 50 and 50 | 50% / 50% | 50.5% / 49.5% |
| 70 and 30 | 70% / 30% | 70.3% / 29.7% |
| 0 and 90 | 0% / 100% | 1.1% / 98.9% |
With weights in the tens or hundreds the difference is a fraction of a percent and you can ignore it. With weights of 1 and 2 the split is not 1:2 at all. Implementations also differ in how they read that sentence — some use a floating-point random number, some exclude the zero — so small weights make the outcome depend on the client rather than on your intent.
Two practical rules. Use weights that add up to something meaningful — 50 and 50, or 70 and 30 — not 1 and 1. And never use weight 0 as "the backup": the RFC says a weight-0 record beside non-zero ones should have "a very small chance of being selected", which measured out at about 1%. A standby belongs on a higher priority number, where it gets no traffic at all until the first tier is unreachable.
This is the question behind most searches for a way to check an SRV record, and the honest answer is that the record is usually fine. What is broken is something the record points at. In order of how often it happens:
The record is published, the syntax is perfect, and the hostname in it returns NXDOMAIN. Nothing can connect, and nothing looks wrong. On 26 September 2026, while building this tool, we asked 134 well-known domains for 44 service names each. Of the 359 SRV records that came back, 77 pointed at a hostname that does not resolve at all.
One cause accounts for a large share of them. Sixteen of those domains still publish _sip._tls pointing at sipdir.online.lync.com. That was the client-discovery host for Skype for Business Online. Microsoft's own lifecycle page gives its retirement date as 31 July 2021, and adds: "After that time, the service will no longer be accessible." Five years later the records are still there. And the near-identical sipfed.online.lync.com — three letters away — is current — Microsoft still publishes it for Teams federation. Which is exactly why this tool resolves the target instead of guessing from the name.
The name exists in the zone and has no A and no AAAA record. Often it is a host that was decommissioned and left in DNS, or a name that only exists on an internal view of the zone, so it works from the office and not from anywhere else.
RFC 2782 forbids it, most clients do it anyway, and that is the trap: it works until something strict refuses to follow the alias. Point the record at a name with its own address record.
Choosing the port is the whole point of an SRV record, so an unusual port is not an error — but a port the service is not listening on is. Whether anything answers there is a different question, and our port scanner is the tool for it: this page checks DNS, not the socket.
A SERVFAIL is not "no record". It usually means the zone is broken or its DNSSEC signatures do not validate, in which case validating resolvers refuse to answer anything about the domain — our DNSSEC checker shows where that chain breaks.
And one thing that is not a fault at all. RFC 2782 says it in one sentence: "A Target of '.' means that the service is decidedly not available at this domain." Gmail publishes exactly that for _imap._tcp and _pop3._tcp, while publishing working records for _imaps._tcp and _submission._tcp. It is telling clients not to try the unencrypted versions. A checker that paints that red is wrong, and this one says so in words.
Every name below is taken from the document that defines it, and the tool's service list builds them for you. Where a name comes from a vendor rather than a standard, that is said; where no first-party source exists, that is said too.
| Service | Name | Usual port | Source |
|---|---|---|---|
| Mail submission | _submission._tcp · _submissions._tcp | 587 · 465 | RFC 6186 · RFC 8314 |
| IMAP and POP | _imaps._tcp · _pop3s._tcp | 993 · 995 | RFC 6186 |
| SIP | _sips._tcp · _sip._tcp · _sip._udp | 5061 · 5060 | RFC 3263 |
| XMPP | _xmpp-client._tcp · _xmpp-server._tcp | 5222 · 5269 | RFC 6120 |
| CalDAV and CardDAV | _caldavs._tcp · _carddavs._tcp | 443 | RFC 6764 |
| Microsoft 365 Autodiscover | _autodiscover._tcp | 443 | Microsoft docs |
| Teams SIP federation | _sipfederationtls._tcp | 5061 | Microsoft docs |
| Active Directory (domain controller locator) | _ldap._tcp.dc._msdcs · _kerberos._tcp | 389 · 88 | Microsoft docs |
| Matrix federation | _matrix-fed._tcp (current) | 8448 | Matrix spec v1.16 |
| MongoDB seed list | _mongodb._tcp | 27017 | MongoDB docs |
| TURN and STUN | _turns._tcp · _stun._udp | 5349 · 3478 | RFC 5928 · RFC 8489 |
| Minecraft: Java Edition | _minecraft._tcp | 25565 | Convention, not a specification |
Three notes worth having before you publish one. The Matrix specification marks _matrix._tcp deprecated in favour of _matrix-fed._tcp, and says administrators are "encouraged to use .well-known over any form of SRV records". A Minecraft SRV record is the one entry here with no first-party specification we could find — it is a convention documented by hosting providers, and it works, but it is not a standard. And SIP is the biggest real-world user of SRV by a wide margin — 152 of the 359 records in our survey were SIP-family — which is why setting up voice, as our guide to how VoIP works describes, nearly always involves publishing one. RFC 3263 also expects a NAPTR lookup before the SRV lookup when the URI names no transport.
The mail entries are part of a bigger picture: autoconfiguration records tell a client where to connect, while SPF, DKIM, DMARC and MTA-STS decide whether your mail is accepted. Our email health check grades that side of it in one pass.
An SRV record lookup proves that a client can find your server. It does not prove much more than that, and these four limits are stated plainly, because a checker that hides them is how people end up trusting the wrong answer.
It cannot tell you the service is running. Whether anything accepts a connection on the port the record names is a different layer, and a different tool. A record can be perfect while the daemon behind it is stopped.
It sees the public internet only. Plenty of SRV targets resolve inside a company network and nowhere else. This page will report such a target as having no address, which is true from outside and misleading from inside — if that is your situation, the record is doing exactly what you designed it to do.
It cannot tell you what one specific client does. RFC 3263 has SIP clients try NAPTR first. The Matrix specification puts a .well-known lookup ahead of the SRV record. Microsoft states that a missing Autodiscover record "should only be considered an error if you intended to configure your environment" to use SRV discovery at all. This tool answers the DNS question; the client's order of preference is its own.
It is one view at one moment. Records are cached along the way, so a change you made minutes ago may not be visible everywhere yet. This page asks the zone's own nameserver as well as a resolver and tells you when the two disagree — but how long a stale copy lasts anywhere else is a TTL question, and our DNS propagation checker is built for it.
An SRV record is a DNS record that says where a particular service lives rather than where a website lives. Where an A record gives one address for a name, an SRV record gives a host and a port, plus a priority and a weight so clients know which host to try first and how to share load between equals. Mail clients, SIP phones, XMPP servers, Matrix servers, Microsoft 365 and Minecraft all find their servers this way.
The owner name has three parts written together: _Service._Proto.Name — for example _imaps._tcp.example.com. Those underscores belong to the name. RFC 2782 kept them deliberately, "to avoid collisions with DNS labels that occur in nature". The protocol label is almost always _tcp or _udp, and it is not interchangeable: a record published under _tcp is invisible to a client looking under _udp.
Priority is failover. RFC 2782 obliges a client to try the lowest-numbered priority it can reach, so the smallest number goes first and the bigger numbers wait until everything above them is unreachable. Weight only matters between records that share a priority, splitting traffic in proportion. Set weights in the tens or hundreds: with very small weights the standard's own arithmetic does not give the split the numbers suggest.
Yes. RFC 2782 is explicit: "There MUST be one or more address records for this name." A target with no address is not a working record — the client resolves the target and gets nothing, so it cannot connect. This is the single most common fault this tool finds, and it is invisible in every lookup tool that prints the record without resolving the target.
It should not, and the standard is blunt about it: the target "MUST NOT be an alias (in the sense of [RFC 1034] or [RFC 2181])". In practice most clients follow the CNAME and the service works, which is exactly why this stays unfixed for years — until something strict does not follow it, or a caching layer resolves the alias differently. Point the record at a name that carries its own A or AAAA record.
Work through it in this order. Is the name exactly right, including _tcp versus _udp? Does the target resolve, and is it an alias? Is the port the one the service actually listens on? Is the target reachable on that port, which is a socket test rather than a DNS one? And has the change had time to leave caches? This tool answers the first three directly.
An SRV record names a host and a port. These check the rest of the chain it depends on.
This page proves a client can find your server. The next question is whether the host answers on the port the record names — and what else that domain publishes in DNS.
Last updated 27 September 2026 · Record rules from RFC 2782; each service name comes from the RFC or vendor page named beside it, and lookups are sent from our server over UDP and TCP port 53.