ドメインのネームサーバーのベアドメインを取得して集計する
Deno.icon Deno で動くよ。書き捨てスクリプトなのである程度はご容赦プリーズ。 code:ts
const parseDomainEx = (v: string) => {
const parsed = parseDomain(v)
if (parsed.type === ParseResultType.Listed && parsed.domain) {
const domain = (() => {
if (/awsdns-\d{2}/.test(parsed.domain)) { return'awsdns-xx'
}
return parsed.domain
})()
return ${domain}.${parsed.topLevelDomains.join('.')}
}
return ''
}
const summarize = (nslist: string[]) => {
return nslist
.map(parseDomainEx)
.filter((v) => v)
.reduce((p, c) => {
pc = Object.keys(p).includes(c) ? pc + 1 : 1 return p
}
const sortOutputEntry = (a: string, b: string) => {
const numA = parseInt(a.split(' ')0, 10) const numB = parseInt(b.split(' ')0, 10) if (numA < numB) { return 1 }
if (numA > numB) { return -1 }
return 0
}
Object.keys(input)
.map((k) => ${input[k]} ${k})
.sort(sortOutputEntry)
.join('\n')
for await (const line of readLines(Deno.stdin)) {
const domain = punycode.toASCII(line.trim())
const res = await fetch(https://dns.google.com/resolve?name=${domain}&type=NS)
if (!res.ok) {
continue
}
const data: GoogleDnsResponse = await res.json()
if (data.Answer && data.Answer0.data) { }
}
console.log(makeOutput(summarize(Object.values(domainNs))))