| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- const https = require('https');
- let ALEXA_TOP_LIMIT = 10000;
- let unzip, csv2, es;
- try {
- unzip = require('unzip-stream');
- csv2 = require('csv2');
- es = require('event-stream');
- } catch (e) {
- console.log('Dependencies not found');
- console.log('"npm i unzip-stream event-stream csv2" then try again!');
- console.error(e);
- process.exit(1);
- }
- (async () => {
- const alexaTopDomains = (await fetchAlexaTopDomains()).sort();
- const dnsmasqconfDomains = await fetchAndParseDnsmasqDomains(alexaTopDomains);
- console.log(dnsmasqconfDomains.length);
- })();
- function fetchAlexaTopDomains() {
- const data = [];
- return new Promise((resolve, reject) => {
- const req = https.request(
- {
- hostname: 's3.amazonaws.com',
- path: '/alexa-static/top-1m.csv.zip',
- method: 'GET',
- },
- (res) => {
- res
- .pipe(unzip.Parse())
- .on('entry', (entry) => {
- entry.pipe(csv2()).on('data', ([top, domain]) => {
- if (top < ALEXA_TOP_LIMIT) {
- data.push(domain);
- }
- });
- });
- res.on('end', () => {
- try {
- resolve(data);
- } catch (e) {
- reject(e);
- }
- });
- req.on('error', (err) => {
- reject(err);
- });
- }
- );
- req.end();
- })
- }
- function fetchAndParseDnsmasqDomains(alexaTopDomains) {
- const data = [];
- return new Promise((resolve, reject) => {
- const req = https.request(
- {
- hostname: 'raw.githubusercontent.com',
- path: '/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf',
- method: 'GET',
- },
- (res) => {
- const s = res
- .pipe(es.split())
- .pipe(es.mapSync(line => {
- s.pause();
- const domain = line
- .replaceAll('server=/', '')
- .replaceAll('/114.114.114.114', '');
- if (alexaTopDomains.includes(domain)) {
- console.log(domain);
- data.push(domain);
- }
- s.resume();
- }))
- .on('error', reject)
- .on('end', () => {
- resolve(data);
- });
- res.on('error', reject);
- }
- );
- req.end();
- })
- }
|