diff --git a/packages/mitmproxy/src/options.js b/packages/mitmproxy/src/options.js index ccb11b6..ea3b29c 100644 --- a/packages/mitmproxy/src/options.js +++ b/packages/mitmproxy/src/options.js @@ -1,7 +1,6 @@ const fs = require('node:fs') const path = require('node:path') const lodash = require('lodash') -const jsonApi = require('./json') const dnsUtil = require('./lib/dns') const interceptorImpls = require('./lib/interceptor') const scriptInterceptor = require('./lib/interceptor/impl/res/script') diff --git a/packages/mitmproxy/test/dnsTest-abroad.mjs b/packages/mitmproxy/test/dnsTest-abroad.mjs new file mode 100644 index 0000000..14117e6 --- /dev/null +++ b/packages/mitmproxy/test/dnsTest-abroad.mjs @@ -0,0 +1,112 @@ +import assert from 'node:assert' +import dns from '../src/lib/dns/index.js' +import matchUtil from '../src/utils/util.match.js' + +const presetIp = '100.100.100.100' +const preSetIpList = matchUtil.domainMapRegexply({ + 'xxx.com': [ + presetIp + ] +}) + +// 境外DNS测试 +const dnsProviders = dns.initDNS({ + // https + cloudflare: { + type: 'https', + server: 'https://1.1.1.1/dns-query', + cacheSize: 1000, + }, + quad9: { + server: 'https://9.9.9.9/dns-query', + cacheSize: 1000, + forSNI: true, + }, + rubyfish: { + server: 'https://rubyfish.cn/dns-query', + cacheSize: 1000, + }, + py233: { + server: ' https://i.233py.com/dns-query', + cacheSize: 1000, + }, + + // tls + cloudflareTLS: { + type: 'tls', + server: '1.1.1.1', + servername: 'cloudflare-dns.com', + cacheSize: 1000, + }, + quad9TLS: { + server: 'tls://9.9.9.9', + servername: 'dns.quad9.net', + cacheSize: 1000, + }, +}, preSetIpList) + + +const hasPresetHostname = 'xxx.com' +const noPresetHostname = 'yyy.com' + +const hostname1 = 'github.com' +const hostname2 = 'api.github.com' +const hostname3 = 'hk.docmirror.cn' +const hostname4 = 'github.docmirror.cn' +const hostname5 = 'gh.docmirror.top' +const hostname6 = 'gh2.docmirror.top' + +let ip + + +console.log('\n--------------- test ForSNI ---------------\n') +console.log(`===> test ForSNI: ${dnsProviders.ForSNI.dnsName}`, '\n\n') +assert.strictEqual(dnsProviders.ForSNI, dnsProviders.quad9) + + +console.log('\n--------------- test PreSet ---------------\n') +ip = await dnsProviders.PreSet.lookup(hasPresetHostname) +console.log(`===> test PreSet: ${hasPresetHostname} ->`, ip, '\n\n') +console.log('\n\n') +assert.strictEqual(ip, presetIp) // 预设过IP,等于预设的IP + +ip = await dnsProviders.PreSet.lookup(noPresetHostname) +console.log(`===> test PreSet: ${noPresetHostname} ->`, ip, '\n\n') +console.log('\n\n') +assert.strictEqual(ip, noPresetHostname) // 未预设IP,等于域名自己 + + +console.log('\n--------------- test https ---------------\n') +ip = await dnsProviders.cloudflare.lookup(hasPresetHostname) +assert.strictEqual(ip, presetIp) // test preset +console.log('\n\n') + +assert.strictEqual(dnsProviders.cloudflare.dnsType, 'HTTPS') +ip = await dnsProviders.cloudflare.lookup(hostname1) +console.log(`===> test cloudflare: ${hostname1} ->`, ip, '\n\n') + +assert.strictEqual(dnsProviders.quad9.dnsType, 'HTTPS') +ip = await dnsProviders.quad9.lookup(hostname1) +console.log(`===> test quad9: ${hostname1} ->`, ip, '\n\n') + +assert.strictEqual(dnsProviders.rubyfish.dnsType, 'HTTPS') +ip = await dnsProviders.rubyfish.lookup(hostname1) +console.log(`===> test rubyfish: ${hostname1} ->`, ip, '\n\n') + +assert.strictEqual(dnsProviders.py233.dnsType, 'HTTPS') +ip = await dnsProviders.py233.lookup(hostname1) +console.log(`===> test py233: ${hostname1} ->`, ip, '\n\n') + + +console.log('\n--------------- test TLS ---------------\n') +ip = await dnsProviders.cloudflareTLS.lookup(hasPresetHostname) +assert.strictEqual(ip, presetIp) // test preset +console.log('\n\n') + +assert.strictEqual(dnsProviders.cloudflareTLS.dnsType, 'TLS') +ip = await dnsProviders.cloudflareTLS.lookup(hostname1) +console.log(`===> test cloudflareTLS: ${hostname1} ->`, ip, '\n\n') + +assert.strictEqual(dnsProviders.quad9TLS.dnsType, 'TLS') +ip = await dnsProviders.quad9TLS.lookup(hostname1) +console.log(`===> test quad9TLS: ${hostname1} ->`, ip, '\n\n') diff --git a/packages/mitmproxy/test/dnsTest.mjs b/packages/mitmproxy/test/dnsTest.mjs index 9134fc2..5b25a65 100644 --- a/packages/mitmproxy/test/dnsTest.mjs +++ b/packages/mitmproxy/test/dnsTest.mjs @@ -9,17 +9,9 @@ const preSetIpList = matchUtil.domainMapRegexply({ ] }) +// 常用DNS测试 const dnsProviders = dns.initDNS({ // https - cloudflare: { - type: 'https', - server: 'https://1.1.1.1/dns-query', - cacheSize: 1000, - }, - quad9: { - server: 'https://9.9.9.9/dns-query', - cacheSize: 1000, - }, aliyun: { type: 'https', server: 'https://dns.alidns.com/dns-query', @@ -35,27 +27,8 @@ const dnsProviders = dns.initDNS({ cacheSize: 1000, forSNI: true, }, - rubyfish: { - server: 'https://rubyfish.cn/dns-query', - cacheSize: 1000, - }, - py233: { - server: ' https://i.233py.com/dns-query', - cacheSize: 1000, - }, // tls - cloudflareTLS: { - type: 'tls', - server: '1.1.1.1', - servername: 'cloudflare-dns.com', - cacheSize: 1000, - }, - quad9TLS: { - server: 'tls://9.9.9.9', - servername: 'dns.quad9.net', - cacheSize: 1000, - }, aliyunTLS: { server: 'tls://223.5.5.5:853', cacheSize: 1000, @@ -133,18 +106,10 @@ assert.strictEqual(ip, noPresetHostname) // 未预设IP,等于域名自己 console.log('\n--------------- test https ---------------\n') -ip = await dnsProviders.cloudflare.lookup(hasPresetHostname) +ip = await dnsProviders.aliyun.lookup(hasPresetHostname) assert.strictEqual(ip, presetIp) // test preset console.log('\n\n') -assert.strictEqual(dnsProviders.cloudflare.dnsType, 'HTTPS') -// ip = await dnsProviders.cloudflare.lookup(hostname1) -// console.log(`===> test cloudflare: ${hostname1} ->`, ip, '\n\n') - -assert.strictEqual(dnsProviders.quad9.dnsType, 'HTTPS') -// ip = await dnsProviders.quad9.lookup(hostname1) -// console.log(`===> test quad9: ${hostname1} ->`, ip, '\n\n') - assert.strictEqual(dnsProviders.aliyun.dnsType, 'HTTPS') ip = await dnsProviders.aliyun.lookup(hostname1) console.log(`===> test aliyun: ${hostname1} ->`, ip, '\n\n') @@ -157,28 +122,12 @@ assert.strictEqual(dnsProviders.safe360.dnsType, 'HTTPS') ip = await dnsProviders.safe360.lookup(hostname1) console.log(`===> test safe360: ${hostname1} ->`, ip, '\n\n') -assert.strictEqual(dnsProviders.rubyfish.dnsType, 'HTTPS') -// ip = await dnsProviders.rubyfish.lookup(hostname1) -// console.log(`===> test rubyfish: ${hostname1} ->`, ip, '\n\n') - -assert.strictEqual(dnsProviders.py233.dnsType, 'HTTPS') -// ip = await dnsProviders.py233.lookup(hostname1) -// console.log(`===> test py233: ${hostname1} ->`, ip, '\n\n') - console.log('\n--------------- test TLS ---------------\n') -ip = await dnsProviders.cloudflareTLS.lookup(hasPresetHostname) +ip = await dnsProviders.aliyunTLS.lookup(hasPresetHostname) assert.strictEqual(ip, presetIp) // test preset console.log('\n\n') -assert.strictEqual(dnsProviders.cloudflareTLS.dnsType, 'TLS') -// ip = await dnsProviders.cloudflareTLS.lookup(hostname1) -// console.log(`===> test cloudflareTLS: ${hostname1} ->`, ip, '\n\n') - -assert.strictEqual(dnsProviders.quad9TLS.dnsType, 'TLS') -// ip = await dnsProviders.quad9TLS.lookup(hostname1) -// console.log(`===> test quad9TLS: ${hostname1} ->`, ip, '\n\n') - assert.strictEqual(dnsProviders.aliyunTLS.dnsType, 'TLS') ip = await dnsProviders.aliyunTLS.lookup(hostname1) console.log(`===> test aliyunTLS: ${hostname1} ->`, ip, '\n\n')