dns_srv_discover
Discover SRV records and service CNAMEs for a domain to identify SIP, XMPP, Autodiscover, LDAP, and other enterprise services.
Instructions
Discover SRV records and common service CNAMEs for a domain. Probes for SIP, XMPP, Autodiscover, LDAP, Kerberos, CalDAV, CardDAV, and checks CNAMEs for autodiscover, lyncdiscover, OWA, ADFS, etc.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to probe |
Implementation Reference
- src/dns/index.ts:359-400 (handler)Core implementation of the dns_srv_discover tool. Probes for SRV records (SIP, XMPP, Autodiscover, LDAP, Kerberos, CalDAV, CardDAV, etc.) and CNAME records (autodiscover, lyncdiscover, OWA, ADFS, etc.) for a given domain.
export async function dnsSrvDiscover(domain: string): Promise<SrvDiscoverResult> { const srvRecords: SrvRecord[] = []; const cnameRecords: CnameRecord[] = []; // SRV probes const srvPromises = SRV_PROBES.map(async (prefix) => { const fqdn = `${prefix}.${domain}`; try { const srvs = await dns.resolveSrv(fqdn); for (const s of srvs) { srvRecords.push({ name: fqdn, target: s.name, port: s.port, priority: s.priority, weight: s.weight }); } } catch { // Not found } }); // CNAME probes const cnamePromises = CNAME_PROBES.map(async (prefix) => { const fqdn = `${prefix}.${domain}`; try { const cnames = await dns.resolveCname(fqdn); for (const c of cnames) { cnameRecords.push({ name: fqdn, target: c }); } } catch { // Not found — try A record to see if it exists try { const ips = await dns.resolve4(fqdn); if (ips.length > 0) { cnameRecords.push({ name: fqdn, target: ips.join(", ") }); } } catch { // Not found } } }); await Promise.all([...srvPromises, ...cnamePromises]); return { domain, srvRecords, cnameRecords }; } - src/dns/index.ts:43-60 (schema)Type definitions for the SRV discovery: SrvRecord, CnameRecord, and SrvDiscoverResult interfaces defining the return shape.
interface SrvRecord { name: string; target: string; port: number; priority: number; weight: number; } interface CnameRecord { name: string; target: string; } interface SrvDiscoverResult { domain: string; srvRecords: SrvRecord[]; cnameRecords: CnameRecord[]; } - src/dns/index.ts:332-345 (schema)SRV_PROBES and CNAME_PROBES constant arrays defining the service prefixes to probe.
const SRV_PROBES = [ "_sip._tls", "_sipfederationtls._tcp", "_autodiscover._tcp", "_xmpp-server._tcp", "_xmpp-client._tcp", "_imaps._tcp", "_submission._tcp", "_ldap._tcp", "_kerberos._tcp", "_kerberos._udp", "_caldavs._tcp", "_carddavs._tcp", ]; - src/protocol/tools.ts:68-75 (registration)ToolDef registration for the 'dns_srv_discover' tool, defining name, description, Zod schema (domain string), and execute handler that calls dnsSrvDiscover from the dns module.
const dnsSrvDiscoverTool: ToolDef = { name: "dns_srv_discover", description: "Discover SRV records and common service CNAMEs for a domain. Probes for SIP, XMPP, Autodiscover, LDAP, Kerberos, CalDAV, CardDAV, and checks CNAMEs for autodiscover, lyncdiscover, OWA, ADFS, etc.", schema: { domain: z.string().describe("Domain to probe"), }, execute: async (args) => json(await dnsSrvDiscover(args.domain as string)), }; - src/protocol/tools.ts:487-488 (registration)Registration of dnsSrvDiscoverTool in the allTools array.
dnsSrvDiscoverTool, dnsWildcardCheckTool,