From 219323a0d62f9b6224291d9a2f0973252f3b9965 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Wed, 24 Mar 2021 13:59:19 +0800 Subject: [PATCH] feat: speedTest --- packages/core/src/config/index.js | 25 +++ .../src/modules/plugin/overwall/config.js | 5 +- packages/gui/src/view/components/setup-ca.vue | 1 - packages/gui/src/view/pages/server.vue | 1 + packages/mitmproxy/package.json | 1 + packages/mitmproxy/src/lib/dns/index.js | 5 + packages/mitmproxy/src/lib/dns/ipaddress.js | 40 +++++ .../src/lib/interceptor/impl/proxy.js | 3 +- .../middleware/InsertScriptMiddleware.js | 1 - .../proxy/mitmproxy/createConnectHandler.js | 13 ++ .../proxy/mitmproxy/createRequestHandler.js | 15 +- .../src/lib/proxy/mitmproxy/index.js | 37 +++++ .../mitmproxy/src/lib/speed/SpeedTester.js | 144 ++++++++++++++++++ packages/mitmproxy/src/lib/speed/config.js | 8 + packages/mitmproxy/src/lib/speed/index.js | 28 ++++ packages/mitmproxy/src/options.js | 3 +- packages/mitmproxy/test/dnsSpeed.js | 33 ++++ packages/mitmproxy/test/dnsTest.mjs | 27 +++- packages/mitmproxy/test/proxyTest.js | 9 +- packages/mitmproxy/yarn.lock | 12 ++ 20 files changed, 397 insertions(+), 14 deletions(-) create mode 100644 packages/mitmproxy/src/lib/dns/ipaddress.js create mode 100644 packages/mitmproxy/src/lib/speed/SpeedTester.js create mode 100644 packages/mitmproxy/src/lib/speed/config.js create mode 100644 packages/mitmproxy/src/lib/speed/index.js create mode 100644 packages/mitmproxy/test/dnsSpeed.js diff --git a/packages/core/src/config/index.js b/packages/core/src/config/index.js index 134e3fea..3df78eed 100644 --- a/packages/core/src/config/index.js +++ b/packages/core/src/config/index.js @@ -152,11 +152,31 @@ module.exports = { server: 'https://dns.alidns.com/dns-query', cacheSize: 1000 }, + ipaddress: { + type: 'ipaddress', + server: 'ipaddress', + cacheSize: 1000 + }, usa: { type: 'https', server: 'https://1.1.1.1/dns-query', cacheSize: 1000 }, + quad9: { + type: 'https', + server: 'https://9.9.9.9/dns-query', + cacheSize: 1000 + } + // google: { + // type: 'https', + // server: 'https://8.8.8.8/dns-query', + // cacheSize: 1000 + // }, + // dnsSB: { + // type: 'https', + // server: 'https://doh.dns.sb/dns-query', + // cacheSize: 1000 + // } }, mapping: { // 'assets.fastgit.org': 'usa', @@ -167,9 +187,14 @@ module.exports = { '*.githubusercontent.com': 'usa', '*.githubassets.com': 'usa', // "解决push的时候需要输入密码的问题", + 'github.com': 'usa', '*github.com': 'usa', '*.vuepress.vuejs.org': 'usa', 'gh.docmirror.top': 'usa' + }, + speedTest: { + hostnameList: ['github.com'], + dnsProviders: ['usa', 'quad9'] } } }, diff --git a/packages/core/src/modules/plugin/overwall/config.js b/packages/core/src/modules/plugin/overwall/config.js index 9a68a156..7f30a4c2 100644 --- a/packages/core/src/modules/plugin/overwall/config.js +++ b/packages/core/src/modules/plugin/overwall/config.js @@ -1,6 +1,6 @@ module.exports = { name: '梯子', - enabled: false, + enabled: false, // 默认关闭梯子 server: { }, serverDefault: { @@ -10,7 +10,8 @@ module.exports = { } }, targets: { - '*facebook.com': true + '*facebook.com': true, + 'github.com': true }, pac: { enabled: true, diff --git a/packages/gui/src/view/components/setup-ca.vue b/packages/gui/src/view/components/setup-ca.vue index 4d8f3c95..d30cb7c6 100644 --- a/packages/gui/src/view/components/setup-ca.vue +++ b/packages/gui/src/view/components/setup-ca.vue @@ -53,7 +53,6 @@ export default { }, async created () { const platform = await this.$api.info.getSystemPlatform() - console.log('11', platform) this.systemPlatform = platform }, computed: { diff --git a/packages/gui/src/view/pages/server.vue b/packages/gui/src/view/pages/server.vue index 35affcb1..acfaa01b 100644 --- a/packages/gui/src/view/pages/server.vue +++ b/packages/gui/src/view/pages/server.vue @@ -69,6 +69,7 @@ USA DNS Aliyun DNS + IpAddress diff --git a/packages/mitmproxy/package.json b/packages/mitmproxy/package.json index 3e90ef2e..c18d211b 100644 --- a/packages/mitmproxy/package.json +++ b/packages/mitmproxy/package.json @@ -12,6 +12,7 @@ "scripts": {}, "dependencies": { "agentkeepalive": "^2.1.1", + "axios": "^0.21.1", "child_process": "^1.0.2", "colors": "^1.1.2", "commander": "^2.9.0", diff --git a/packages/mitmproxy/src/lib/dns/index.js b/packages/mitmproxy/src/lib/dns/index.js index 08bdbec1..cdf125eb 100644 --- a/packages/mitmproxy/src/lib/dns/index.js +++ b/packages/mitmproxy/src/lib/dns/index.js @@ -1,10 +1,15 @@ const DNSOverTLS = require('./tls.js') const DNSOverHTTPS = require('./https.js') +const DNSOverIpAddress = require('./ipaddress.js') module.exports = { initDNS (dnsProviders) { const dnsMap = {} for (const provider in dnsProviders) { const conf = dnsProviders[provider] + if (conf.type === 'ipaddress') { + dnsMap[provider] = new DNSOverIpAddress(conf.server) + continue + } dnsMap[provider] = conf.type === 'https' ? new DNSOverHTTPS(conf.server) : new DNSOverTLS(conf.server) } return dnsMap diff --git a/packages/mitmproxy/src/lib/dns/ipaddress.js b/packages/mitmproxy/src/lib/dns/ipaddress.js new file mode 100644 index 00000000..f5ddd5b7 --- /dev/null +++ b/packages/mitmproxy/src/lib/dns/ipaddress.js @@ -0,0 +1,40 @@ +const dnstls = require('dns-over-tls') +const BaseDNS = require('./base') +const axios = require('axios') +const log = require('../../utils/util.log') +const fs = require('fs') +const path = require('path') +module.exports = class DNSOverIpAddress extends BaseDNS { + async _lookup (hostname) { + const url = `https://${hostname}.ipaddress.com` + + // const res = fs.readFileSync(path.resolve(__dirname, './data.txt')).toString() + const res = await axios.get(url) + if (res.status !== 200 && res.status !== 201) { + log.info(`[dns] get ${hostname} ipaddress: error:${res}`) + return + } + const ret = res.data + + const regexp = /IP Address<\/th>