浏览代码

Chore: improve domai alive check [skip ci]

SukkaW 1 年之前
父节点
当前提交
0590097b47
共有 2 个文件被更改,包括 27 次插入10 次删除
  1. 7 5
      Build/lib/is-domain-alive.ts
  2. 20 5
      Build/validate-domain-alive.ts

+ 7 - 5
Build/lib/is-domain-alive.ts

@@ -203,15 +203,13 @@ async function isApexDomainAlive(apexDomain: string): Promise<[string, boolean]>
     return onDomainAlive(apexDomain);
   }
 
-  console.log(picocolors.gray('[domain check]'), picocolors.gray('no NS records'), { domain: apexDomain });
-
   let whois;
 
   try {
     whois = await getWhois(apexDomain);
   } catch (e) {
     console.log(picocolors.red('[domain dead]'), 'whois error', { domain: apexDomain }, e);
-    return onDomainDead(apexDomain);
+    return onDomainAlive(apexDomain);
   }
 
   if (process.env.DEBUG) {
@@ -224,7 +222,7 @@ async function isApexDomainAlive(apexDomain: string): Promise<[string, boolean]>
     return onDomainAlive(apexDomain);
   }
 
-  console.log(picocolors.red('[domain dead]'), 'whois not found', { domain: apexDomain, whoisError });
+  console.log(picocolors.red('[domain dead]'), 'whois not found', { domain: apexDomain, err: whoisError });
   return onDomainDead(apexDomain);
 }
 
@@ -241,7 +239,11 @@ const whoisNotFoundKeywordTest = createKeywordFilter([
   'no matching record',
   'no information available about domain name',
   'not been registered',
-  'no match!!'
+  'no match!!',
+  'status: available',
+  ' is free',
+  'no object found',
+  'nothing found'
 ]);
 
 // whois server can redirect, so whoiser might/will get info from multiple whois servers

+ 20 - 5
Build/validate-domain-alive.ts

@@ -9,6 +9,13 @@ import { fdir as Fdir } from 'fdir';
 
 const queue = newQueue(32);
 
+const deadDomains: string[] = [];
+function onDomain(args: [string, boolean]) {
+  if (!args[1]) {
+    deadDomains.push(args[0]);
+  }
+}
+
 (async () => {
   const domainSets = await new Fdir()
     .withFullPaths()
@@ -24,7 +31,9 @@ const queue = newQueue(32);
     ...domainRules.map(runAgainstRuleset)
   ]);
 
-  console.log('done');
+  console.log();
+  console.log();
+  console.log(JSON.stringify(deadDomains));
 })();
 
 export async function runAgainstRuleset(filepath: string) {
@@ -34,7 +43,7 @@ export async function runAgainstRuleset(filepath: string) {
     return;
   }
 
-  const promises: Array<Promise<[string, boolean]>> = [];
+  const promises: Array<Promise<void>> = [];
 
   for await (const l of readFileByLine(filepath)) {
     const line = processLine(l);
@@ -43,7 +52,10 @@ export async function runAgainstRuleset(filepath: string) {
     switch (type) {
       case 'DOMAIN-SUFFIX':
       case 'DOMAIN': {
-        promises.push(queue.add(() => keyedAsyncMutexWithQueue(domain, () => isDomainAlive(domain, type === 'DOMAIN-SUFFIX'))));
+        promises.push(
+          queue.add(() => keyedAsyncMutexWithQueue(domain, () => isDomainAlive(domain, type === 'DOMAIN-SUFFIX')))
+            .then(onDomain)
+        );
         break;
       }
       // no default
@@ -61,12 +73,15 @@ export async function runAgainstDomainset(filepath: string) {
     return;
   }
 
-  const promises: Array<Promise<[string, boolean]>> = [];
+  const promises: Array<Promise<void>> = [];
 
   for await (const l of readFileByLine(filepath)) {
     const line = processLine(l);
     if (!line) continue;
-    promises.push(queue.add(() => keyedAsyncMutexWithQueue(line, () => isDomainAlive(line, line[0] === '.'))));
+    promises.push(
+      queue.add(() => keyedAsyncMutexWithQueue(line, () => isDomainAlive(line, line[0] === '.')))
+        .then(onDomain)
+    );
   }
 
   await Promise.all(promises);