Ir al contenido
Tutorial

API de búsqueda de DNS: consulta registros A, MX y TXT a través de REST

| 6 min read

Busque registros DNS mediante programación con 3 puntos finales REST. Consulta tipos de registros únicos, agrupa varios tipos y comprueba la propagación en Google, Cloudflare y Quad9.

Server racks in a data center
Photo by Taylor Vick on Unsplash

Su secuencia de comandos de monitoreo debe verificar los registros MX después de una migración de DNS. Podrías instalar dig, analiza su salida de varias líneas con expresiones regulares y maneja la docena de casos extremos donde el formato varía según el tipo de registro. O puede enviar una solicitud HTTP y obtener JSON estructurado de nuevo.

La API de DNS de botoi le ofrece tres puntos finales: búsqueda de un solo tipo, búsqueda por lotes para múltiples tipos de registros a la vez y un verificador de propagación que consulta a Google, Cloudflare y Quad9 en paralelo. Los tres devuelven JSON consistente que puedes introducir en cualquier script o aplicación. sin analizar la gimnasia.

Buscar un solo tipo de registro

La /v1/dns/lookup El punto final toma un dominio y un tipo de registro opcional. si Si omite el tipo, el valor predeterminado son registros A. Aquí hay una búsqueda MX para stripe.com:

curl -X POST https://api.botoi.com/v1/dns/lookup \\
  -H "Content-Type: application/json" \\
  -d '{"domain": "stripe.com", "type": "MX"}'

Respuesta:

{
  "success": true,
  "data": {
    "domain": "stripe.com",
    "type": "MX",
    "records": [
      { "type": "MX", "value": "aspmx.l.google.com", "priority": 1, "ttl": 3600 },
      { "type": "MX", "value": "alt1.aspmx.l.google.com", "priority": 5, "ttl": 3600 },
      { "type": "MX", "value": "alt2.aspmx.l.google.com", "priority": 5, "ttl": 3600 },
      { "type": "MX", "value": "alt3.aspmx.l.google.com", "priority": 10, "ttl": 3600 },
      { "type": "MX", "value": "alt4.aspmx.l.google.com", "priority": 10, "ttl": 3600 }
    ],
    "query_time_ms": 14
  }
}

Cada registro MX regresa con una priority campo y un ttl en segundos. No es necesario dividir cadenas ni adivinar qué número es la prioridad; la API lo hace eso para ti.

Registros TXT para SPF y verificación

Los registros TXT contienen políticas SPF, tokens de propiedad de dominio y selectores DKIM. Consúltales el de la misma manera:

curl -X POST https://api.botoi.com/v1/dns/lookup \\
  -H "Content-Type: application/json" \\
  -d '{"domain": "github.com", "type": "TXT"}'

Respuesta:

{
  "success": true,
  "data": {
    "domain": "github.com",
    "type": "TXT",
    "records": [
      { "type": "TXT", "value": "v=spf1 ip4:192.30.252.0/22 include:_netblocks.google.com ~all", "ttl": 3600 },
      { "type": "TXT", "value": "MS=ms58704441", "ttl": 3600 },
      { "type": "TXT", "value": "docusign=087098e3-3d46-47b7-9b4e-8a23028154cd", "ttl": 3600 }
    ],
    "query_time_ms": 11
  }
}

La API admite ocho tipos de registros: A, AAAA, MX, TXT, CNAME, NS, SOA y PTR. cada uno tipo devuelve el mismo formato estructurado con type, value, y ttl campos.

Consultar varios tipos de registros a la vez

Cuatro llamadas HTTP separadas para obtener registros A, MX, TXT y NS son un desperdicio. El /v1/dns/batch El punto final ejecuta todas las búsquedas en paralelo y devuelve el resultados agrupados por tipo.

curl -X POST https://api.botoi.com/v1/dns/batch \\
  -H "Content-Type: application/json" \\
  -d '{"domain": "github.com", "types": ["A", "MX", "TXT", "NS"]}'

Respuesta:

{
  "success": true,
  "data": {
    "domain": "github.com",
    "results": {
      "A": [
        { "type": "A", "value": "140.82.121.3", "ttl": 60 }
      ],
      "MX": [
        { "type": "MX", "value": "aspmx.l.google.com", "priority": 1, "ttl": 3600 },
        { "type": "MX", "value": "alt1.aspmx.l.google.com", "priority": 5, "ttl": 3600 },
        { "type": "MX", "value": "alt2.aspmx.l.google.com", "priority": 5, "ttl": 3600 }
      ],
      "TXT": [
        { "type": "TXT", "value": "v=spf1 ip4:192.30.252.0/22 include:_netblocks.google.com ~all", "ttl": 3600 },
        { "type": "TXT", "value": "MS=ms58704441", "ttl": 3600 }
      ],
      "NS": [
        { "type": "NS", "value": "dns1.p08.nsone.net", "ttl": 900 },
        { "type": "NS", "value": "dns2.p08.nsone.net", "ttl": 900 },
        { "type": "NS", "value": "dns3.p08.nsone.net", "ttl": 900 },
        { "type": "NS", "value": "dns4.p08.nsone.net", "ttl": 900 }
      ]
    }
  }
}

Una solicitud, una respuesta, los cuatro tipos de registros. Si omites el types matriz, el punto final por defecto es A, AAAA, MX, TXT y NS. Esto es útil para construir paneles de descripción general del dominio o ejecutar auditorías DNS integrales.

Verifique la propagación de DNS entre solucionadores

Actualizaste tu registro A hace 20 minutos. Su solucionador local muestra la nueva IP, pero Los clientes de otras regiones todavía acceden al servidor anterior. El /v1/dns/propagation El punto final consulta a tres solucionadores públicos importantes y le informa si están de acuerdo.

curl -X POST https://api.botoi.com/v1/dns/propagation \\
  -H "Content-Type: application/json" \\
  -d '{"domain": "stripe.com", "type": "A"}'

Respuesta:

{
  "success": true,
  "data": {
    "domain": "stripe.com",
    "type": "A",
    "resolvers": {
      "google": {
        "records": ["185.166.143.28", "185.166.143.29"],
        "response_time_ms": 18
      },
      "cloudflare": {
        "records": ["185.166.143.28", "185.166.143.29"],
        "response_time_ms": 9
      },
      "quad9": {
        "records": ["185.166.143.28", "185.166.143.29"],
        "response_time_ms": 22
      }
    },
    "consistent": true
  }
}

La consistent el campo es true cuando los tres resolutores devuelven el mismo conjunto ordenado de registros. cuando es false, la resolvers objeto muestra exactamente qué solucionador sigue entregando datos obsoletos y cuánto tiempo tomó cada consulta.

Ejemplo práctico: verificar registros MX antes de aceptar registros

Un caso de uso común: alguien entra user@typo-domain.cm en su formulario de registro. La validación de sintaxis pasa porque el formato es correcto, pero el dominio no tiene servidores de correo. Lo descubrirá tres días después, cuando rebote el correo electrónico de bienvenida.

Este ejemplo de Node.js verifica los registros MX en el momento del registro y rechaza las direcciones de correo electrónico que apuntan a dominios sin infraestructura de correo:

import express from "express";

const app = express();
app.use(express.json());

async function lookupMx(domain) {
  const res = await fetch("https://api.botoi.com/v1/dns/lookup", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "X-Api-Key": process.env.BOTOI_API_KEY,
    },
    body: JSON.stringify({ domain, type: "MX" }),
  });
  return res.json();
}

app.post("/signup", async (req, res) => {
  const { email } = req.body;
  const domain = email.split("@")[1];

  // Check if the domain has MX records before accepting the signup
  const { data } = await lookupMx(domain);

  if (!data.records || data.records.length === 0) {
    return res.status(422).json({
      error: \`The domain \\\${domain} has no mail servers. Check the email address and try again.\`,
    });
  }

  // MX records exist; proceed with signup
  await createUser({ email });
  res.status(201).json({ created: true });
});

app.listen(3000);

La verificación agrega entre 10 y 30 ms a la solicitud de registro. Es un precio pequeño para evitar rebotes daño a su reputación como remitente. También puedes almacenar en caché los resultados MX por dominio durante 30 minutos. para evitar búsquedas repetidas para el mismo dominio.

Monitorear la propagación de DNS después de una migración

Después de cambiar los registros DNS, desea saber en qué momento todos los solucionadores principales ofrecen el nuevo valores. Este script sondea el punto final de propagación cada 30 segundos y registra el estado de cada solucionador:

async function checkPropagation(domain, type) {
  const res = await fetch("https://api.botoi.com/v1/dns/propagation", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "X-Api-Key": process.env.BOTOI_API_KEY,
    },
    body: JSON.stringify({ domain, type }),
  });
  return res.json();
}

// After updating DNS records, poll until all resolvers agree
async function waitForPropagation(domain, type, intervalMs = 30000) {
  let attempts = 0;

  while (attempts < 60) {
    const { data } = await checkPropagation(domain, type);

    console.log(
      \`Attempt \\\${attempts + 1}: consistent=\\\${data.consistent}\`
    );

    for (const [name, info] of Object.entries(data.resolvers)) {
      console.log(\`  \\\${name}: \\\${JSON.stringify(info.records)}\`);
    }

    if (data.consistent) {
      console.log("Propagation complete.");
      return data;
    }

    attempts++;
    await new Promise((r) => setTimeout(r, intervalMs));
  }

  throw new Error("Propagation did not complete within 30 minutes.");
}

// Usage
waitForPropagation("yourdomain.com", "A");

Ejecute esto como trabajo en segundo plano después de realizar cambios de DNS. Registra los registros de cada resuelve en cada intento y sale cuando los tres están de acuerdo. El intervalo de 30 segundos te mantiene bajo el límite de velocidad del nivel gratuito (5 solicitudes por minuto).

Puntos clave

  • /v1/dns/lookup devuelve JSON estructurado para cualquiera de los ocho admitidos tipos de registros. Los registros MX incluyen prioridad; Los registros SOA incluyen serie, actualización, reintento, caducar y campos mínimos.
  • /v1/dns/batch consulta varios tipos de registros en paralelo con una sola solicitud. El valor predeterminado es A, AAAA, MX, TXT y NS si no lo especifica.
  • /v1/dns/propagation comprueba Google, Cloudflare y Quad9 y devuelve un booleano consistent bandera. Úselo para verificar que los cambios de DNS se hayan globalizado.
  • Los tres puntos finales funcionan de forma anónima a 5 solicitudes/min. pasar un X-Api-Key encabezado para límites más altos.
  • La API se ejecuta en la red perimetral de Cloudflare. Las consultas se resuelven mediante DNS sobre HTTPS, para que obtengas la misma confiabilidad que consultar Cloudflare o Google DNS directamente, envuelto en un formato JSON fácil de usar para desarrolladores.

FAQ

¿Cómo busco registros DNS mediante programación?
Envíe una solicitud POST a https://api.botoi.com/v1/dns/lookup con un cuerpo JSON que contenga el dominio y el tipo de registro. La API devuelve JSON estructurado con todos los registros coincidentes, TTL y tiempo de consulta. No se requiere instalación de excavación ni análisis de salida.
¿Qué tipos de registros DNS admite la API?
La API admite ocho tipos de registros: A, AAAA, MX, TXT, CNAME, NS, SOA y PTR. Si omite el parámetro de tipo, el valor predeterminado es registros A.
¿Cómo verifico si los cambios de DNS se han propagado?
Utilice el punto final /v1/dns/propagation. Consulta Google DNS, Cloudflare DNS y Quad9 en paralelo y devuelve un valor booleano "consistente" que indica si los tres solucionadores devuelven los mismos registros. Si consistente es falso, la propagación aún está en progreso.
¿Puedo consultar varios tipos de registros DNS en una sola solicitud?
Sí. El punto final /v1/dns/batch acepta una matriz de tipos (por ejemplo, ["A", "MX", "TXT"]) y los consulta a todos en paralelo. La respuesta agrupa los registros por tipo. Si omite el parámetro tipos, el valor predeterminado es A, AAAA, MX, TXT y NS.
¿La API de búsqueda de DNS es gratuita?
El acceso anónimo está disponible a 5 solicitudes por minuto y 100 solicitudes por día con limitación de velocidad basada en IP. No se requiere clave API ni cuenta. Para un mayor rendimiento, los planes pagos comienzan en $9/mes con una única clave API que cubre los más de 150 puntos finales.

Empieza a construir con botoi

150+ endpoints de API para consultas, procesamiento de texto, generacion de imagenes y utilidades para desarrolladores. Plan gratuito, sin tarjeta de credito.