Kaip galiu išvardyti VISUS DNS įrašus?

Ar yra koks nors būdas, kaip galėčiau išvardyti VISUS domeno DNS įrašus?

Žinau apie tokius dalykus kaip dig ir nslookup, bet jie tik tiek. Pavyzdžiui, jei turiu subdomeno A įrašą, pvz.

test A somedomain.co.uk

tada, jei jo specialiai neprašau, pvz.

dig any test.somedomain.co.uk

Aš jo nematau.

Ar yra koks nors kitas būdas (išskyrus įrašus, kuriuos galima peržiūrėti nuėjus į DNS tvarkyklę) tiksliai pamatyti, kokie yra visi DNS įrašai?

Sprendimas

Kai pateiksite užklausą ANY, gausite visų to lygio įrašų, bet ne žemesnio, sąrašą.

# try this
dig google.com any

Tai gali grąžinti A įrašus, TXT įrašus, NS įrašus, MX įrašus ir t. t., jei domeno vardas yra tiksliai "google.com". Tačiau nebus grąžinami pavaldūs įrašai (pvz., www.google.com). Tiksliau, galite gauti šiuos įrašus, jei jie egzistuoja. Vardų serveris neprivalo grąžinti šių įrašų, jei nusprendžia to nedaryti (pavyzdžiui, norėdamas sumažinti atsakymo dydį).

AXFR yra zonos perkėlimas ir greičiausiai yra tai, ko jūs norite. Tačiau paprastai jie yra ribojami ir nepasiekiami, nebent kontroliuojate zoną. Paprastai zonos perkėlimą atliksite tiesiogiai iš autoritetinio serverio (toliau nurodytas @ns1.google.com) ir dažnai iš vardų serverio, kuris gali būti neskelbiamas (slaptas vardų serveris).

# This will return "Transfer failed"
dig @ns1.google.com google.com axfr

Jei kontroliuojate zoną, galite nustatyti, kad ji gautų perkėlimus, apsaugotus TSIG raktu. Tai bendrinama paslaptis, kurią klientas gali nusiųsti serveriui, kad patvirtintų perdavimą.

Komentarai (6)

Neturėdamas galimybės atlikti zonų perkėlimą, parašiau šį nedidelį "bash" skriptą dg:

#!/bin/bash
COMMON_SUBDOMAINS=(www mail smtp pop imap blog en ftp ssh login)
if [[ "$2" == "x" ]]; then
    dig +nocmd "$1" +noall +answer "${3:-any}"
    wild_ips="$(dig +short "*.$1" "${3:-any}" | tr '\n' '|')"
    wild_ips="${wild_ips%|}"
    for sub in "${COMMON_SUBDOMAINS[@]}"; do
        dig +nocmd "$sub.$1" +noall +answer "${3:-any}"
    done | grep -vE "${wild_ips}"
    dig +nocmd "*.$1" +noall +answer "${3:-any}"
else
    dig +nocmd "$1" +noall +answer "${2:-any}"
fi

Dabar naudoju dg example.com, norėdamas gauti gražų, švarų DNS įrašų sąrašą, arba dg example.com x, norėdamas įtraukti daugybę kitų populiarių subdomenų.

grep -vE "${wild_ips}" išfiltruoja įrašus, kurie gali būti pakaitinio DNS įrašo, pavyzdžiui, * 10800 IN A 1.38.216.82, rezultatas. Priešingu atveju dėl pakaitinio simbolio įrašo atrodytų, kad kiekvienam $COMMON_SUBDOMAN yra įrašų.

Pastaba: tai priklauso nuo ANY užklausų, kurias blokuoja kai kurie DNS paslaugų teikėjai, pavyzdžiui, "CloudFlare".

Komentarai (1)

Tai, ko norite, vadinama zonos perkėlimu. Zonos perkėlimo galite paprašyti naudodami dig -t axfr.

zona - tai domenas ir visi po juo esantys domenai, kurie nėra perduoti kitam serveriui.

Atkreipkite dėmesį, kad zonos perkėlimas ne visada palaikomas. Jie nenaudojami įprastai paieškai, o tik DNS duomenų kopijavimui tarp serverių; tačiau tam gali būti naudojami kiti protokolai (pvz., rsync per ssh), gali kilti pavojus saugumui dėl vardų atskleidimo, be to, zonos perkėlimo atsakymus generuoti ir siųsti kainuoja brangiau nei įprastas DNS paieškas.

Komentarai (0)