Latihan 1 dari materi DNS Basics di DevOps — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.
Lengkapi function resolveDns(zone, domain, type) supaya meniru resolver: mencari record di zone dan mengikuti CNAME.
zone adalah array record { name, type, value, ttl }.
Simpan chain = [] dan nama yang sedang dicari, mulai dari domain.
Masukkan nama itu ke chain. Kalau ada record dengan name itu dan type yang diminta, kembalikan { value, ttl, chain } dari record itu, dengan urutan key persis begitu.
Kalau gak ada, cari record CNAME dengan name itu. Ketemu? Ganti nama yang dicari jadi value CNAME-nya, lalu ulangi langkah 2.
Gak ada record yang cocok sama sekali? Kembalikan { error: "NXDOMAIN" }.
Batasi jumlah lompatan (misalnya 10) supaya CNAME yang saling menunjuk gak berputar selamanya. Bagian ini gak dinilai, tapi jangan sampai loop-mu jalan terus.
Yang dicek:
Zona berisi myapp.com A 1.2.3.4 TTL 300, ditanya "myapp.com", "A": hasilnya { value: "1.2.3.4", ttl: 300, chain: ["myapp.com"] }.
Zona yang sama ditambah www.myapp.com CNAME myapp.com, ditanya "www.myapp.com", "A": hasilnya { value: "1.2.3.4", ttl: 300, chain: ["www.myapp.com", "myapp.com"] }.
Zona kosong, ditanya "unknown.com", "A": hasilnya { error: "NXDOMAIN" }.
Zona dan console.log(...) di kode awal sudah ada, biarkan saja.
Hint
Resolver mencari record dengan nama dan tipe yang diminta. Kalau yang ada cuma CNAME, dia pindah ke nama tujuannya dan mencari lagi, sambil mencatat semua nama yang dilewati.
Pakai loop for (let hop = 0; hop < 10; hop++). Di dalamnya: chain.push(current), cari record tipe yang diminta dengan zone.find, kalau gak ada cari CNAME, kalau gak ada juga return { error: "NXDOMAIN" }, kalau ada ganti current = alias.value.
const direct = zone.find((r) => r.name === current && r.type === type); if (direct) return { value: direct.value, ttl: direct.ttl, chain }; const alias = zone.find((r) => r.name === current && r.type === "CNAME"); if (!alias) return { error: "NXDOMAIN" }; current = alias.value;
</>{ }.css=>#idfn()
Versi baru
HyperSheets
bagian dari BelajarWeb.dev
0%
Membuka gerbang…
HyperSheets
Memperbarui Aplikasi
Versi baru tersedia. Halaman akan dimuat ulang otomatis...