mirror of
https://github.com/certd/certd.git
synced 2026-04-16 05:50:50 +08:00
chore:
This commit is contained in:
@@ -1,15 +1,15 @@
|
||||
import {LocalCache, logger} from '@certd/basic';
|
||||
import dnsSdk, {AnyRecord} from 'dns'
|
||||
import { LRUCache } from 'lru-cache';
|
||||
import {LookupAddress} from "node:dns";
|
||||
|
||||
const dns = dnsSdk.promises
|
||||
|
||||
export class DnsCustom{
|
||||
private resolver: dnsSdk.promises.Resolver;
|
||||
private cache = new LRUCache<string, any>({
|
||||
max: 1000,
|
||||
ttl: 1000 * 60 * 5,
|
||||
});
|
||||
// private cache = new LRUCache<string, any>({
|
||||
// max: 1000,
|
||||
// ttl: 1000 * 60 * 5,
|
||||
// });
|
||||
|
||||
constructor(dnsServers:string[]) {
|
||||
const resolver = new dns.Resolver();
|
||||
@@ -17,45 +17,21 @@ export class DnsCustom{
|
||||
this.resolver = resolver;
|
||||
}
|
||||
|
||||
// async lookup(hostname:string,options?:{ family: any, hints: number, all: boolean }):Promise<LookupAddress[]>{
|
||||
// const cacheKey = hostname + JSON.stringify(options)
|
||||
// let res = this.cache.get(cacheKey)
|
||||
// if (res){
|
||||
// return res
|
||||
// }
|
||||
// res = await this.doLookup(hostname,options)
|
||||
// this.cache.set(cacheKey,res)
|
||||
// return res
|
||||
// }
|
||||
async lookup(hostname:string,options?:{ family: any, hints: number, all: boolean }):Promise<LookupAddress[]>{
|
||||
const cacheKey = hostname + JSON.stringify(options)
|
||||
let res = this.cache.get(cacheKey)
|
||||
if (res){
|
||||
return res
|
||||
}
|
||||
res = await this.doLookup(hostname,options)
|
||||
this.cache.set(cacheKey,res)
|
||||
return res
|
||||
}
|
||||
async doLookup(hostname:string,options?:{ family: any, hints: number, all: boolean }):Promise<LookupAddress[]>{
|
||||
// { family: undefined, hints: 0, all: true }
|
||||
let cnameIps:LookupAddress[] = []
|
||||
let v4:LookupAddress[] = []
|
||||
let v6:LookupAddress[] = []
|
||||
let errors = []
|
||||
const resolveCname = async ()=>{
|
||||
let cnames = []
|
||||
try{
|
||||
cnames = await this.resolver.resolveCname(hostname)
|
||||
}catch (e) {
|
||||
errors.push(e)
|
||||
logger.warn("query cname error",e)
|
||||
}
|
||||
// deep
|
||||
if (cnames && cnames.length > 0) {
|
||||
for (let cname of cnames) {
|
||||
try{
|
||||
const cnameIp = await this.lookup(cname,options)
|
||||
if (cnameIp && cnameIp.length > 0) {
|
||||
cnameIps.push(...cnameIp)
|
||||
}
|
||||
}catch (e) {
|
||||
errors.push(e)
|
||||
logger.warn("lookup cname error",e)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
const queryV6 = async ()=>{
|
||||
try{
|
||||
const list = await this.resolver.resolve6(hostname)
|
||||
@@ -89,7 +65,7 @@ export class DnsCustom{
|
||||
}
|
||||
}
|
||||
|
||||
const queries:Promise<any>[] = [resolveCname()]
|
||||
const queries:Promise<any>[] = []
|
||||
|
||||
|
||||
const {family, all} = options
|
||||
@@ -105,7 +81,7 @@ export class DnsCustom{
|
||||
}
|
||||
}
|
||||
await Promise.all(queries)
|
||||
const res = [...v4,...v6,...cnameIps]
|
||||
const res = [...v4,...v6]
|
||||
if(res.length === 0){
|
||||
if (errors.length > 0){
|
||||
const e = new Error(errors[0])
|
||||
|
||||
Reference in New Issue
Block a user