Langsung ke konten
Tutorial

API pencarian DNS: data kueri A, MX, dan TXT melalui REST

| 6 min read

Cari catatan DNS secara terprogram dengan 3 titik akhir REST. Kueri jenis rekaman tunggal, kumpulan beberapa jenis, dan periksa propagasi di Google, Cloudflare, dan Quad9.

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

Skrip pemantauan Anda perlu memverifikasi data MX setelah migrasi DNS. Anda dapat menginstal dig, parsing keluaran multi-barisnya dengan regex, dan tangani lusinan kasus tepi di mana formatnya bervariasi antar jenis rekaman. Atau Anda dapat mengirim satu permintaan HTTP dan mendapatkannya JSON terstruktur kembali.

Botoi DNS API memberi Anda tiga titik akhir: pencarian tipe tunggal, pencarian batch untuk beberapa jenis jenis rekaman sekaligus, dan pemeriksa propagasi yang menanyakan Google, Cloudflare, dan Quad9 secara paralel. Ketiganya mengembalikan JSON yang konsisten yang dapat Anda masukkan ke dalam skrip atau aplikasi apa pun tanpa parsing senam.

Cari satu jenis rekaman

Itu /v1/dns/lookup titik akhir mengambil domain dan jenis catatan opsional. Jika Anda menghilangkan jenisnya, defaultnya adalah catatan A. Berikut pencarian MX untuk stripe.com:

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

Tanggapan:

{
  "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
  }
}

Setiap data MX dikembalikan dengan a priority lapangan dan a ttl di detik. Tidak perlu membagi string atau menebak nomor mana yang menjadi prioritas; API melakukannya itu untukmu.

Data TXT untuk SPF dan verifikasi

Data TXT berisi kebijakan SPF, token kepemilikan domain, dan pemilih DKIM. Tanyakan kepada mereka cara yang sama:

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

Tanggapan:

{
  "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
  }
}

API mendukung delapan jenis data: A, AAAA, MX, TXT, CNAME, NS, SOA, dan PTR. Masing-masing type mengembalikan format terstruktur yang sama dengan type, value, Dan ttl bidang.

Kueri beberapa jenis rekaman sekaligus

Empat panggilan HTTP terpisah untuk mendapatkan data A, MX, TXT, dan NS adalah pemborosan. Itu /v1/dns/batch titik akhir menjalankan semua pencarian secara paralel dan mengembalikan hasil dikelompokkan berdasarkan jenisnya.

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

Tanggapan:

{
  "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 }
      ]
    }
  }
}

Satu permintaan, satu respons, keempat jenis rekaman. Jika Anda menghilangkan types array, titik akhir defaultnya adalah A, AAAA, MX, TXT, dan NS. Ini berguna untuk membangun dasbor ikhtisar domain atau menjalankan audit DNS yang komprehensif.

Periksa propagasi DNS di seluruh penyelesai

Anda memperbarui rekor A Anda 20 menit yang lalu. Resolver lokal Anda menunjukkan IP baru, namun pelanggan di wilayah lain masih menggunakan server lama. Itu /v1/dns/propagation endpoint menanyakan tiga penyelesai publik utama dan memberi tahu Anda apakah mereka setuju.

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

Tanggapan:

{
  "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
  }
}

Itu consistent bidang adalah true ketika ketiga penyelesai mengembalikan kumpulan catatan yang diurutkan sama. Kapan itu false, itu resolvers objek menunjukkan kepada Anda penyelesai mana yang masih menyajikan data usang dan berapa lama waktu yang dibutuhkan untuk setiap kueri.

Contoh praktis: verifikasi data MX sebelum menerima pendaftaran

Kasus penggunaan umum: seseorang masuk user@typo-domain.cm dalam formulir pendaftaran Anda. Validasi sintaks lolos karena formatnya benar, namun domain tidak memiliki server email. Anda akan mengetahuinya tiga hari kemudian ketika email selamat datang terpental.

Contoh Node.js ini memeriksa data MX pada waktu pendaftaran dan menolak penunjukan alamat email ke domain tanpa infrastruktur email:

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

Cek menambahkan 10-30 ms ke permintaan pendaftaran. Itu harga yang kecil untuk mencegah terkait pentalan merusak reputasi pengirim Anda. Anda juga dapat menyimpan hasil MX per domain selama 30 menit untuk menghindari pencarian berulang untuk domain yang sama.

Pantau propagasi DNS setelah migrasi

Setelah mengubah data DNS, Anda ingin mengetahui kapan semua penyelesai utama menyajikan yang baru nilai-nilai. Skrip ini melakukan polling titik akhir propagasi setiap 30 detik dan mencatat statusnya setiap penyelesai:

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");

Jalankan ini sebagai pekerjaan latar belakang setelah melakukan perubahan DNS. Ini mencatat catatan dari masing-masing penyelesai pada setiap upaya dan keluar ketika ketiganya setuju. Interval 30 detik membuat Anda tetap bertahan di bawah batas tarif tingkat gratis (5 permintaan per menit).

Poin-poin penting

  • /v1/dns/lookup mengembalikan JSON terstruktur untuk salah satu dari delapan yang didukung jenis rekaman. Data MX mencakup prioritas; Catatan SOA meliputi serial, refresh, coba lagi, kedaluwarsa, dan bidang minimum.
  • /v1/dns/batch menanyakan beberapa jenis catatan secara paralel dengan satu permintaan. Defaultnya adalah A, AAAA, MX, TXT, dan NS jika Anda tidak menentukannya.
  • /v1/dns/propagation memeriksa Google, Cloudflare, dan Quad9 dan mengembalikan a boolean consistent bendera. Gunakan untuk memverifikasi bahwa perubahan DNS sudah bersifat global.
  • Ketiga titik akhir bekerja secara anonim pada 5 permintaan/mnt. Lulus sebuah X-Api-Key header untuk batas yang lebih tinggi.
  • API berjalan di jaringan edge Cloudflare. Pertanyaan diselesaikan melalui DNS-over-HTTPS, sehingga Anda mendapatkan keandalan yang sama seperti menanyakan Cloudflare atau Google DNS secara langsung dalam format JSON yang ramah pengembang.

FAQ

Bagaimana cara mencari catatan DNS secara terprogram?
Kirim permintaan POST ke https://api.botoi.com/v1/dns/lookup dengan isi JSON yang berisi domain dan jenis catatan. API mengembalikan JSON terstruktur dengan semua catatan, TTL, dan waktu kueri yang cocok. Tidak diperlukan instalasi penggalian atau penguraian keluaran.
Jenis data DNS apa yang didukung API?
API mendukung delapan jenis data: A, AAAA, MX, TXT, CNAME, NS, SOA, dan PTR. Jika Anda menghilangkan parameter tipe, defaultnya adalah rekaman A.
Bagaimana cara memeriksa apakah perubahan DNS telah menyebar?
Gunakan titik akhir /v1/dns/propagation. Ini menanyakan Google DNS, Cloudflare DNS, dan Quad9 secara paralel dan mengembalikan boolean "konsisten" yang menunjukkan apakah ketiga penyelesai mengembalikan catatan yang sama. Jika konsisten salah, propagasi masih berlangsung.
Bisakah saya menanyakan beberapa jenis data DNS dalam satu permintaan?
Ya. Titik akhir /v1/dns/batch menerima array tipe (misalnya, ["A", "MX", "TXT"]) dan menanyakan semuanya secara paralel. Respons mengelompokkan catatan berdasarkan jenisnya. Jika Anda menghilangkan parameter tipe, defaultnya adalah A, AAAA, MX, TXT, dan NS.
Apakah API pencarian DNS gratis?
Akses anonim tersedia dengan 5 permintaan per menit dan 100 permintaan per hari dengan pembatasan tarif berbasis IP. Tidak diperlukan kunci API atau akun. Untuk throughput yang lebih tinggi, paket berbayar mulai dari $9/bulan dengan satu kunci API yang mencakup 150+ titik akhir.

Mulai membangun dengan botoi

150+ endpoint API untuk pencarian, pemrosesan teks, pembuatan gambar, dan utilitas developer. Paket gratis, tanpa kartu kredit.