From 113fd100bd986f2dad8e69da9041caaa14760f2b Mon Sep 17 00:00:00 2001 From: star knight <64941905+starknt@users.noreply.github.com> Date: Sun, 20 Oct 2024 22:47:05 +0800 Subject: [PATCH 01/25] =?UTF-8?q?bugfix:=20Windows=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=EF=BC=8C=E5=BC=80=E7=9D=80DS=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E9=87=8D=E5=90=AF=E7=94=B5=E8=84=91=E5=90=8E=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E4=B8=8A=E7=BD=91=E7=9A=84=E9=97=AE=E9=A2=98=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=20(#377)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/gui/package.json | 4 +- packages/gui/src/background.js | 18 ++- packages/gui/src/background/powerMonitor.js | 135 ++++++++++++++++++++ packages/gui/vue.config.js | 21 +++ 4 files changed, 175 insertions(+), 3 deletions(-) create mode 100644 packages/gui/src/background/powerMonitor.js diff --git a/packages/gui/package.json b/packages/gui/package.json index ae24c9b..6d6a5ae 100644 --- a/packages/gui/package.json +++ b/packages/gui/package.json @@ -23,6 +23,8 @@ "dependencies": { "@docmirror/dev-sidecar": "^1.8.8", "@docmirror/mitmproxy": "^1.8.8", + "@mihomo-party/sysproxy": "^2.0.4", + "@natmri/platform-napi": "0.0.7", "adm-zip": "^0.5.5", "ant-design-vue": "^1.6.5", "compressing": "^1.5.1", @@ -52,9 +54,9 @@ "@vue/eslint-config-standard": "^5.1.2", "babel-eslint": "^10.1.0", "electron": "^17.4.11", + "electron-builder": "^23.0.3", "electron-devtools-installer": "^3.1.0", "electron-icon-builder": "^2.0.1", - "electron-builder": "^23.0.3", "eslint": "^6.7.2", "eslint-plugin-import": "^2.20.2", "eslint-plugin-node": "^11.1.0", diff --git a/packages/gui/src/background.js b/packages/gui/src/background.js index 9bab6ae..2e7da09 100644 --- a/packages/gui/src/background.js +++ b/packages/gui/src/background.js @@ -1,12 +1,15 @@ 'use strict' /* global __static */ import path from 'path' -import { app, protocol, BrowserWindow, Menu, Tray, ipcMain, dialog, powerMonitor, nativeImage, nativeTheme, globalShortcut } from 'electron' +import { app, protocol, BrowserWindow, Menu, Tray, ipcMain, dialog, nativeImage, nativeTheme, globalShortcut } from 'electron' +import { powerMonitor } from './background/powerMonitor' import { createProtocol } from 'vue-cli-plugin-electron-builder/lib' import backend from './bridge/backend' import DevSidecar from '@docmirror/dev-sidecar' import log from './utils/util.log' import minimist from 'minimist' + +const isWindows = process.platform === 'win32' // eslint-disable-next-line no-unused-vars const isMac = process.platform === 'darwin' // import installExtension, { VUEJS_DEVTOOLS } from 'electron-devtools-installer' @@ -187,6 +190,11 @@ function createWindow (startHideWindow) { Menu.setApplicationMenu(null) win.setMenu(null) + // !!IMPORTANT + if (isWindows) { + powerMonitor.setupMainWindow(win) + } + if (process.env.WEBPACK_DEV_SERVER_URL) { // Load the url of the dev server if in development mode win.loadURL(process.env.WEBPACK_DEV_SERVER_URL) @@ -443,8 +451,14 @@ if (!isFirstInstance) { } powerMonitor.on('shutdown', async (e) => { - e.preventDefault() + if (e) { + e.preventDefault() + } log.info('系统关机,恢复代理设置') + if (isWindows) { + const Sysproxy = require('@mihomo-party/sysproxy') + Sysproxy.triggerManualProxy(false, '', 0, '') + } await quit() }) }) diff --git a/packages/gui/src/background/powerMonitor.js b/packages/gui/src/background/powerMonitor.js new file mode 100644 index 0000000..dd8b9ac --- /dev/null +++ b/packages/gui/src/background/powerMonitor.js @@ -0,0 +1,135 @@ +import { powerMonitor as _powerMonitor } from 'electron' +import { setMainWindowHandle, insertWndProcHook, removeWndProcHook, releaseShutdownBlock, acquireShutdownBlock } from '@natmri/platform-napi' + +class PowerMonitor { + constructor () { + this.setup = false + this._listeners = [] + this._shutdownCallback = null + } + + /** + * @param {BrowserWindow} window + */ + setupMainWindow (window) { + if (!this.setup) { + setMainWindowHandle(window.getNativeWindowHandle().readBigInt64LE()) + this.setup = true + } + } + + addListener (event, listener) { + return this.on(event, listener) + } + + removeListener (event, listener) { + return this.off(event, listener) + } + + removeAllListeners (event) { + if (event === 'shutdown' && process.platform === 'win32') { + this._listeners = [] + if (this._shutdownCallback) { + removeWndProcHook() + releaseShutdownBlock() + this._shutdownCallback = null + } + } else { + return _powerMonitor.removeAllListeners(event) + } + } + + on (event, listener) { + if (event === 'shutdown' && process.platform === 'win32') { + if (!this._shutdownCallback) { + this._shutdownCallback = async () => { + await Promise.all(this._listeners.map((fn) => fn())) + releaseShutdownBlock() + } + insertWndProcHook(this._shutdownCallback) + acquireShutdownBlock('正在停止 DevSidecar 代理') + } + this._listeners.push(listener) + } else { + return _powerMonitor.on(event, listener) + } + } + + off (event, listener) { + if (event === 'shutdown' && process.platform === 'win32') { + this._listeners = this._listeners.filter((fn) => fn !== listener) + } else { + return _powerMonitor.off(event, listener) + } + } + + once (event, listener) { + if (event === 'shutdown' && process.platform === 'win32') { + return this.on(event, listener) + } else { + return _powerMonitor.once(event, listener) + } + } + + emit (event, ...args) { + return _powerMonitor.emit(event, ...args) + } + + eventNames () { + return _powerMonitor.eventNames() + } + + getMaxListeners () { + return _powerMonitor.getMaxListeners() + } + + listeners (event) { + return _powerMonitor.listeners(event) + } + + rawListeners (event) { + return _powerMonitor.rawListeners(event) + } + + listenerCount (event, listener) { + return _powerMonitor.listenerCount(event, listener) + } + + /** + * @returns {boolean} + */ + get onBatteryPower () { + return _powerMonitor.onBatteryPower + } + + /** + * @param {number} idleThreshold + * @returns {'active'|'idle'|'locked'|'unknown'} + */ + getSystemIdleState (idleThreshold) { + return _powerMonitor.getSystemIdleState(idleThreshold) + } + + /** + * @returns {number} + */ + getSystemIdleTime () { + return _powerMonitor.getSystemIdleTime() + } + + /** + * @returns {'unknown'|'nominal'|'fair'|'serious'|'critical'} + */ + getCurrentThermalState () { + return _powerMonitor.getCurrentThermalState() + } + + /** + * @returns {boolean} + */ + isOnBatteryPower () { + return _powerMonitor.isOnBatteryPower() + } +} + +export const powerMonitor = new PowerMonitor() diff --git a/packages/gui/vue.config.js b/packages/gui/vue.config.js index 8ab804b..65392ba 100644 --- a/packages/gui/vue.config.js +++ b/packages/gui/vue.config.js @@ -32,6 +32,27 @@ module.exports = { }, pluginOptions: { electronBuilder: { + externals: [ + '@mihomo-party/sysproxy', + '@mihomo-party/sysproxy-win32-ia32-msvc', + '@mihomo-party/sysproxy-win32-x64-msvc', + '@mihomo-party/sysproxy-win32-arm64-msvc', + '@mihomo-party/sysproxy-linux-x64-gnu', + '@mihomo-party/sysproxy-linux-arm64-gnu', + '@mihomo-party/sysproxy-darwin-x64', + '@mihomo-party/sysproxy-darwin-arm64', + '@natmri/platform-napi', + "@natmri/platform-napi-win32-x64-msvc", + "@natmri/platform-napi-darwin-x64", + "@natmri/platform-napi-linux-x64-gnu", + "@natmri/platform-napi-darwin-arm64", + "@natmri/platform-napi-linux-arm64-gnu", + "@natmri/platform-napi-linux-arm64-musl", + "@natmri/platform-napi-win32-arm64-msvc", + "@natmri/platform-napi-linux-arm-gnueabihf", + "@natmri/platform-napi-linux-x64-musl", + "@natmri/platform-napi-win32-ia32-msvc" + ], nodeIntegration: true, // Provide an array of files that, when changed, will recompile the main process and restart Electron // Your main process file will be added by default From 1799319b99f7586c9ee62aab74c64168c4d84382 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Mon, 21 Oct 2024 09:52:19 +0800 Subject: [PATCH 02/25] =?UTF-8?q?=E8=B0=83=E6=95=B4QQ=E7=BE=A4=E4=BF=A1?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1985974..20e0d67 100644 --- a/README.md +++ b/README.md @@ -394,9 +394,9 @@ npm run electron:build 1、 加群(请备注dev-sidecar,或简称DS) - QQ 1群:390691483,人数:500 / 500(满) -- QQ 2群:[667666069](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=n4nksr4sji93vZtD5e8YEHRT6qbh6VyQ&authKey=XKBZnzmoiJrAFyOT4V%2BCrgX5c13ds59b84g%2FVRhXAIQd%2FlAiilsuwDRGWJct%2B570&noverify=0&group_code=667666069),人数:439 / 500 +- QQ 2群:[667666069](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=n4nksr4sji93vZtD5e8YEHRT6qbh6VyQ&authKey=XKBZnzmoiJrAFyOT4V%2BCrgX5c13ds59b84g%2FVRhXAIQd%2FlAiilsuwDRGWJct%2B570&noverify=0&group_code=667666069),人数:447 / 500 - QQ 3群:419807815,人数:500 / 500(满) -- QQ 4群:438148299,人数:200 / 200(满) +- QQ 4群:[438148299](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=i_NCBB5f_Bkm2JsEV1tLs2TkQ79UlCID&authKey=nMsVJbJ6P%2FGNO7Q6vsVUadXRKnULUURwR8zvUZJnP3IgzhHYPhYdcBCHvoOh8vYr&noverify=0&group_code=438148299),人数:203 / 1000 - QQ 5群:[767622917](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=nAWi_Rxj7mM4Unp5LMiatmUWhGimtbcB&authKey=aswmlWGjbt3GIWXtvjB2GJqqAKuv7hWjk6UBs3MTb%2Biyvr%2Fsbb1kA9CjF6sK7Hgg&noverify=0&group_code=767622917),人数:016 / 200(new) From 1eff51c30b7932c2910d0423d2131277bc9544bb Mon Sep 17 00:00:00 2001 From: Greper Date: Mon, 21 Oct 2024 11:10:45 +0800 Subject: [PATCH 03/25] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 20e0d67..7133ae3 100644 --- a/README.md +++ b/README.md @@ -14,8 +14,8 @@ > ## 打个广告 > -> https://ai.handsfree.work -> 我的ChatGPT,开发者必备,无需fanQ,快速,稳定,价格良心,100问仅需1元,按需扣费,余额永久有效,大家可以试试 +> https://github.com/certd/certd +> 我的开源证书管理工具项目,全自动申请和部署证书,有需求的可以去试试,帮忙点个star From c88332755d760540c44795b1609c1324391ad43c Mon Sep 17 00:00:00 2001 From: Greper Date: Mon, 21 Oct 2024 11:11:02 +0800 Subject: [PATCH 04/25] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7133ae3..ae544ed 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ > ## 打个广告 > -> https://github.com/certd/certd +> https://github.com/certd/certd > 我的开源证书管理工具项目,全自动申请和部署证书,有需求的可以去试试,帮忙点个star From 9fc844e9397974efa732ba3ef43d0b5157b81873 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Mon, 21 Oct 2024 15:04:02 +0800 Subject: [PATCH 05/25] =?UTF-8?q?optimize:=20DNS=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E7=BB=86=E8=8A=82=E4=BC=98=E5=8C=96=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/mitmproxy/src/lib/dns/index.js | 12 +++++++---- .../proxy/mitmproxy/createRequestHandler.js | 3 +++ packages/mitmproxy/src/utils/util.match.js | 20 +++++++------------ 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/packages/mitmproxy/src/lib/dns/index.js b/packages/mitmproxy/src/lib/dns/index.js index e93df39..eed0f2c 100644 --- a/packages/mitmproxy/src/lib/dns/index.js +++ b/packages/mitmproxy/src/lib/dns/index.js @@ -20,6 +20,7 @@ module.exports = { // 设置DNS名称到name属性中 dnsMap[provider].name = provider + dnsMap[provider].type = conf.type } return dnsMap }, @@ -27,17 +28,20 @@ module.exports = { let providerName = matchUtil.matchHostname(dnsConfig.mapping, hostname, 'get dns providerName') // usa已重命名为cloudflare,以下为向下兼容处理 - if (providerName === 'usa') { + if (providerName === 'usa' && dnsConfig.providers[providerName] == null) { providerName = 'cloudflare' } // 如果为空,尝试从预设IP中匹配,如果配置过预设IP,则随便 - if (providerName == null) { + if (providerName == null || dnsConfig.providers[providerName] == null) { const hostnamePreSetIpList = matchUtil.matchHostname(dnsConfig.preSetIpList, hostname, 'matched preSetIpList') if (hostnamePreSetIpList) { for (const name in dnsConfig.providers) { - log.debug(`当前域名未配置过DNS,但配置了预设IP,现返回DNS '${name}' 作为预设IP的使用工具,hostname: ${hostname}, preSetIpList:`, hostnamePreSetIpList) - return dnsConfig.providers[name] + const provider = dnsConfig.providers[name] + if (provider.type === 'https') { + log.debug(`当前域名未配置过DNS,但配置了预设IP,现返回DNS '${name}' 作为预设IP的使用工具,hostname: ${hostname}, preSetIpList:`, hostnamePreSetIpList) + return dnsConfig.providers[name] + } } } } diff --git a/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js b/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js index fd09159..5cd7c89 100644 --- a/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js +++ b/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js @@ -120,6 +120,9 @@ module.exports = function createRequestHandler (createIntercepts, middlewares, e } if (dns) { rOptions.lookup = dnsLookup.createLookupFunc(res, dns, 'request url', url, isDnsIntercept) + log.debug(`域名 ${rOptions.hostname} DNS: ${dns.name}`) + } else { + log.debug(`域名 ${rOptions.hostname} 在dns中未配置`) } } diff --git a/packages/mitmproxy/src/utils/util.match.js b/packages/mitmproxy/src/utils/util.match.js index 14d69aa..f8fcd5b 100644 --- a/packages/mitmproxy/src/utils/util.match.js +++ b/packages/mitmproxy/src/utils/util.match.js @@ -26,11 +26,11 @@ function domainRegexply (target) { } function domainMapRegexply (hostMap) { + if (hostMap == null) { + return { origin: {} } + } const regexpMap = {} const origin = {} // 用于快速匹配,见matchHostname、matchHostnameAll方法 - if (hostMap == null) { - return regexpMap - } lodash.each(hostMap, (value, domain) => { if (domain.indexOf('*') >= 0 || domain[0] === '^') { const regDomain = domain[0] !== '^' ? domainRegexply(domain) : domain @@ -127,8 +127,8 @@ function matchHostnameAll (hostMap, hostname, action) { let value // 通配符匹配 或 正则表达式匹配(优先级:1,最低) - for (const target in hostMap) { - if (target === 'origin') { + for (const regexp in hostMap) { + if (regexp === 'origin') { continue } @@ -136,16 +136,10 @@ function matchHostnameAll (hostMap, hostname, action) { // continue // 不是通配符匹配串,也不是正则表达式,跳过 // } - // 如果是通配符匹配串,转换为正则表达式 - let regexp = target - // if (target[0] !== '^') { - // regexp = domainRegexply(regexp) - // } - // 正则表达式匹配 if (hostname.match(regexp)) { - value = hostMap[target] - log.debug(`matchHostname-one: ${action}: '${hostname}' -> { "${target}": ${JSON.stringify(value)} }`) + value = hostMap[regexp] + log.debug(`matchHostname-one: ${action}: '${hostname}' -> { "${regexp}": ${JSON.stringify(value)} }`) values = merge(values, value) } } From 063cb4fa1dc23852f6af370aa5be52528406af39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Tue, 22 Oct 2024 09:36:15 +0800 Subject: [PATCH 06/25] =?UTF-8?q?=E6=97=A5=E5=BF=97=E4=BC=98=E5=8C=96?= =?UTF-8?q?=EF=BC=9A=E5=8C=BA=E5=88=86=E4=BB=A3=E7=90=86=E8=BF=9E=E6=8E=A5?= =?UTF-8?q?=E5=92=8C=E7=9B=B4=E8=BF=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/lib/proxy/mitmproxy/createConnectHandler.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/mitmproxy/src/lib/proxy/mitmproxy/createConnectHandler.js b/packages/mitmproxy/src/lib/proxy/mitmproxy/createConnectHandler.js index 78198eb..e5a68f0 100644 --- a/packages/mitmproxy/src/lib/proxy/mitmproxy/createConnectHandler.js +++ b/packages/mitmproxy/src/lib/proxy/mitmproxy/createConnectHandler.js @@ -88,7 +88,7 @@ function connect (req, cltSocket, head, hostname, port, dnsConfig = null, isDire }) proxySocket.on('timeout', () => { const cost = new Date() - start - const errorMsg = `代理连接超时: ${hostport}, cost: ${cost} ms` + const errorMsg = `${isDirect ? '直连' : '代理连接'}超时: ${hostport}, cost: ${cost} ms` log.error(errorMsg) cltSocket.destroy() @@ -102,7 +102,7 @@ function connect (req, cltSocket, head, hostname, port, dnsConfig = null, isDire proxySocket.on('error', (e) => { // 连接失败,可能被GFW拦截,或者服务端拥挤 const cost = new Date() - start - const errorMsg = `代理连接失败: ${hostport}, cost: ${cost} ms, errorMsg: ${e.message}` + const errorMsg = `${isDirect ? '直连' : '代理连接'}失败: ${hostport}, cost: ${cost} ms, errorMsg: ${e.message}` log.error(errorMsg) cltSocket.destroy() @@ -115,6 +115,6 @@ function connect (req, cltSocket, head, hostname, port, dnsConfig = null, isDire }) return proxySocket } catch (e) { - log.error(`Proxy connect error: ${hostport}, exception:`, e) + log.error(`${isDirect ? '直连' : '代理连接'}错误: ${hostport}, error:`, e) } } From ddbf1e11855ad7813a10b23ad5ed541b50907705 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Tue, 22 Oct 2024 12:42:06 +0800 Subject: [PATCH 07/25] =?UTF-8?q?=E6=97=A5=E5=BF=97=E4=BC=98=E5=8C=96?= =?UTF-8?q?=EF=BC=9A=E5=BC=80=E5=8F=91=E9=98=B6=E6=AE=B5=EF=BC=8C=E6=89=93?= =?UTF-8?q?=E5=8D=B0=E6=9B=B4=E5=A4=9A=E5=AE=A2=E6=88=B7=E7=AB=AF=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5=E5=92=8C=E4=BB=A3=E7=90=86=E8=BF=9E=E6=8E=A5=E7=9A=84?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E6=97=A5=E5=BF=97=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../proxy/mitmproxy/createConnectHandler.js | 86 +++++++++++++++++-- 1 file changed, 79 insertions(+), 7 deletions(-) diff --git a/packages/mitmproxy/src/lib/proxy/mitmproxy/createConnectHandler.js b/packages/mitmproxy/src/lib/proxy/mitmproxy/createConnectHandler.js index e5a68f0..83fe6d6 100644 --- a/packages/mitmproxy/src/lib/proxy/mitmproxy/createConnectHandler.js +++ b/packages/mitmproxy/src/lib/proxy/mitmproxy/createConnectHandler.js @@ -58,6 +58,49 @@ function connect (req, cltSocket, head, hostname, port, dnsConfig = null, isDire const isDnsIntercept = {} const hostport = `${hostname}:${port}` try { + // 客户端的连接事件监听 + cltSocket.on('timeout', (e) => { + log.error(`cltSocket timeout: ${hostport}, errorMsg: ${e.message}`) + }) + cltSocket.on('error', (e) => { + log.error(`cltSocket error: ${hostport}, errorMsg: ${e.message}`) + }) + // 开发过程中,如有需要可以将此参数临时改为true,打印所有事件的日志 + const printDebugLog = false && process.env.NODE_ENV === 'development' + if (printDebugLog) { + cltSocket.on('close', (hadError) => { + log.debug('【cltSocket close】', hadError) + }) + cltSocket.on('connect', () => { + log.debug('【cltSocket connect】') + }) + cltSocket.on('connectionAttempt', (ip, port, family) => { + log.debug(`【cltSocket connectionAttempt】${ip}:${port}, family:`, family) + }) + cltSocket.on('connectionAttemptFailed', (ip, port, family) => { + log.debug(`【cltSocket connectionAttemptFailed】${ip}:${port}, family:`, family) + }) + cltSocket.on('connectionAttemptTimeout', (ip, port, family) => { + log.debug(`【cltSocket connectionAttemptTimeout】${ip}:${port}, family:`, family) + }) + cltSocket.on('data', (data) => { + log.debug('【cltSocket data】') + }) + cltSocket.on('drain', () => { + log.debug('【cltSocket drain】') + }) + cltSocket.on('end', () => { + log.debug('【cltSocket end】') + }) + // cltSocket.on('lookup', (err, address, family, host) => { + // }) + cltSocket.on('ready', () => { + log.debug('【cltSocket ready】') + }) + } + + // --------------------------------------------------------------------------------------------------- + const options = { port, host: hostname, @@ -69,8 +112,10 @@ function connect (req, cltSocket, head, hostname, port, dnsConfig = null, isDire options.lookup = dnsLookup.createLookupFunc(null, dns, 'connect', hostport, isDnsIntercept) } } + // 代理连接事件监听 const proxySocket = net.connect(options, () => { if (!isDirect) log.info('Proxy connect start:', hostport) + else log.debug('Direct connect start:', hostport) cltSocket.write('HTTP/1.1 200 Connection Established\r\n' + 'Proxy-agent: dev-sidecar\r\n' + @@ -80,12 +125,6 @@ function connect (req, cltSocket, head, hostname, port, dnsConfig = null, isDire cltSocket.pipe(proxySocket) }) - cltSocket.on('timeout', (e) => { - log.error(`cltSocket timeout: ${hostport}, errorMsg: ${e.message}`) - }) - cltSocket.on('error', (e) => { - log.error(`cltSocket error: ${hostport}, errorMsg: ${e.message}`) - }) proxySocket.on('timeout', () => { const cost = new Date() - start const errorMsg = `${isDirect ? '直连' : '代理连接'}超时: ${hostport}, cost: ${cost} ms` @@ -103,7 +142,7 @@ function connect (req, cltSocket, head, hostname, port, dnsConfig = null, isDire // 连接失败,可能被GFW拦截,或者服务端拥挤 const cost = new Date() - start const errorMsg = `${isDirect ? '直连' : '代理连接'}失败: ${hostport}, cost: ${cost} ms, errorMsg: ${e.message}` - log.error(errorMsg) + log.error(`${errorMsg}\r\n`, e) cltSocket.destroy() @@ -113,6 +152,39 @@ function connect (req, cltSocket, head, hostname, port, dnsConfig = null, isDire log.error(`记录ip失败次数,用于优选ip! hostname: ${hostname}, ip: ${ip}, reason: ${errorMsg}, dns: ${dns.name}`) } }) + + if (printDebugLog) { + proxySocket.on('close', (hadError) => { + log.debug('【proxySocket close】', hadError) + }) + proxySocket.on('connect', () => { + log.debug('【proxySocket connect】') + }) + proxySocket.on('connectionAttempt', (ip, port, family) => { + log.debug(`【proxySocket connectionAttempt】${ip}:${port}, family:`, family) + }) + proxySocket.on('connectionAttemptFailed', (ip, port, family) => { + log.debug(`【proxySocket connectionAttemptFailed】${ip}:${port}, family:`, family) + }) + proxySocket.on('connectionAttemptTimeout', (ip, port, family) => { + log.debug(`【proxySocket connectionAttemptTimeout】${ip}:${port}, family:`, family) + }) + proxySocket.on('data', (data) => { + log.debug('【proxySocket data】') + }) + proxySocket.on('drain', () => { + log.debug('【proxySocket drain】') + }) + proxySocket.on('end', () => { + log.debug('【proxySocket end】') + }) + // proxySocket.on('lookup', (err, address, family, host) => { + // }) + proxySocket.on('ready', () => { + log.debug('【proxySocket ready】') + }) + } + return proxySocket } catch (e) { log.error(`${isDirect ? '直连' : '代理连接'}错误: ${hostport}, error:`, e) From a1c8ee0bd17e6afc1fd32829277802b5c8afe9dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Wed, 23 Oct 2024 13:02:31 +0800 Subject: [PATCH 08/25] =?UTF-8?q?optimize:=20=E5=BD=93=E4=BD=BF=E7=94=A8DN?= =?UTF-8?q?S=E6=97=B6=EF=BC=8C=E6=B7=BB=E5=8A=A0=E5=93=8D=E5=BA=94?= =?UTF-8?q?=E5=A4=B4=20`DS-DNS:=20${dns.name}`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/lib/proxy/mitmproxy/createRequestHandler.js | 5 ++++- packages/mitmproxy/src/lib/proxy/mitmproxy/dnsLookup.js | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js b/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js index 5cd7c89..90ac584 100644 --- a/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js +++ b/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js @@ -121,9 +121,12 @@ module.exports = function createRequestHandler (createIntercepts, middlewares, e if (dns) { rOptions.lookup = dnsLookup.createLookupFunc(res, dns, 'request url', url, isDnsIntercept) log.debug(`域名 ${rOptions.hostname} DNS: ${dns.name}`) + res.setHeader('DS-DNS', dns.name) } else { - log.debug(`域名 ${rOptions.hostname} 在dns中未配置`) + log.info(`域名 ${rOptions.hostname} 在DNS中未配置`) } + } else { + log.info(`域名 ${rOptions.hostname} DNS配置不存在`) } // rOptions.sigalgs = 'RSA-PSS+SHA256:RSA-PSS+SHA512:ECDSA+SHA256' diff --git a/packages/mitmproxy/src/lib/proxy/mitmproxy/dnsLookup.js b/packages/mitmproxy/src/lib/proxy/mitmproxy/dnsLookup.js index 83109d9..8925f3e 100644 --- a/packages/mitmproxy/src/lib/proxy/mitmproxy/dnsLookup.js +++ b/packages/mitmproxy/src/lib/proxy/mitmproxy/dnsLookup.js @@ -8,7 +8,7 @@ module.exports = { return (hostname, options, callback) => { const tester = speedTest.getSpeedTester(hostname) - if (tester && tester.ready) { + if (tester) { const aliveIpObj = tester.pickFastAliveIpObj() if (aliveIpObj) { log.info(`----- ${action}: ${hostname}, use alive ip from dns '${aliveIpObj.dns}': ${aliveIpObj.host}${target} -----`) From 8dc5cfc37c909200ae8d8e19fd342b8f1051d145 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Thu, 24 Oct 2024 11:42:57 +0800 Subject: [PATCH 09/25] =?UTF-8?q?optimize:=20=E6=B5=8B=E9=80=9F=E8=B6=85?= =?UTF-8?q?=E8=BF=87250ms=E7=9A=84=EF=BC=8C=E6=98=BE=E7=A4=BA=E4=B8=BA?= =?UTF-8?q?=E9=BB=84=E8=89=B2=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/gui/src/view/pages/server.vue | 2 +- packages/gui/src/view/style/theme/dark.scss | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/gui/src/view/pages/server.vue b/packages/gui/src/view/pages/server.vue index 32105a1..af9714f 100644 --- a/packages/gui/src/view/pages/server.vue +++ b/packages/gui/src/view/pages/server.vue @@ -211,7 +211,7 @@ + :color="element.time?(element.time>250?'orange':'green'):'red'" :key='index'> {{ element.host }} {{ element.time }}{{ element.time ? 'ms' : '' }} {{ element.dns }} diff --git a/packages/gui/src/view/style/theme/dark.scss b/packages/gui/src/view/style/theme/dark.scss index e2128b2..9a257db 100644 --- a/packages/gui/src/view/style/theme/dark.scss +++ b/packages/gui/src/view/style/theme/dark.scss @@ -122,6 +122,12 @@ $dark-input: #777; //输入框:背景色 border-color: #505f5f; color: #90cb9f; } + /* 标签:警告 */ + .ant-tag-orange{ + background: #62605e; + border-color: #62605e; + color: #e7aa61; + } /* 按钮 */ .ant-btn:not(.ant-btn-danger, .ant-btn-primary){ From 21e46a4124861f831cbd2f3062720a2ac43d3876 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Thu, 24 Oct 2024 15:19:58 +0800 Subject: [PATCH 10/25] =?UTF-8?q?optimize:=20=E6=98=AF=E5=90=A6=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E4=BB=A3=E7=90=86=E7=9A=84=E5=88=A4=E6=96=AD=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E9=80=BB=E8=BE=91=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mitmproxy/src/lib/proxy/middleware/overwall.js | 11 ++--------- .../src/lib/proxy/mitmproxy/createConnectHandler.js | 8 ++++---- packages/mitmproxy/src/options.js | 4 ++-- 3 files changed, 8 insertions(+), 15 deletions(-) diff --git a/packages/mitmproxy/src/lib/proxy/middleware/overwall.js b/packages/mitmproxy/src/lib/proxy/middleware/overwall.js index 72f0aa6..50230c7 100644 --- a/packages/mitmproxy/src/lib/proxy/middleware/overwall.js +++ b/packages/mitmproxy/src/lib/proxy/middleware/overwall.js @@ -148,14 +148,7 @@ function createOverwallMiddleware (overWallConfig) { return { sslConnectInterceptor: (req, cltSocket, head) => { const hostname = req.url.split(':')[0] - const ret = matched(hostname, overWallTargetMap) - if (ret == null) { - return null // 返回 null,由下一个拦截器校验 - } - if (ret === false) { - return false // 不拦截,预留这个判断,避免以后修改 matched 方法的代码出BUG - } - return true // 拦截 + return matched(hostname, overWallTargetMap) }, requestIntercept (context, req, res, ssl, next) { const { rOptions, log, RequestCounter } = context @@ -164,7 +157,7 @@ function createOverwallMiddleware (overWallConfig) { } const hostname = rOptions.hostname const matchedResult = matched(hostname, overWallTargetMap) - if (matchedResult == null || matchedResult === false) { + if (matchedResult == null || matchedResult === false || matchedResult === 'false') { return } const cacheKey = '__over_wall_proxy__' diff --git a/packages/mitmproxy/src/lib/proxy/mitmproxy/createConnectHandler.js b/packages/mitmproxy/src/lib/proxy/mitmproxy/createConnectHandler.js index 83fe6d6..9590210 100644 --- a/packages/mitmproxy/src/lib/proxy/mitmproxy/createConnectHandler.js +++ b/packages/mitmproxy/src/lib/proxy/mitmproxy/createConnectHandler.js @@ -9,11 +9,11 @@ const jsonApi = require('../../../json') function isSslConnect (sslConnectInterceptors, req, cltSocket, head) { for (const intercept of sslConnectInterceptors) { const ret = intercept(req, cltSocket, head) - log.debug(`拦截判断结果:${ret}, url: ${req.url}, intercept:`, intercept) - if (ret === false || ret === true) { - return ret + log.debug('当前拦截器返回结果:', ret, `, url: ${req.url}, intercept:`, intercept) + if (ret == null) { + continue } - // continue + return !(ret === false || ret === 'false') } return false } diff --git a/packages/mitmproxy/src/options.js b/packages/mitmproxy/src/options.js index 1a165fc..1c6094d 100644 --- a/packages/mitmproxy/src/options.js +++ b/packages/mitmproxy/src/options.js @@ -119,10 +119,10 @@ module.exports = (serverConfig) => { const matched = matchUtil.matchHostname(intercepts, hostname, 'matched intercepts') if ((!!matched) === true) { log.debug(`拦截器拦截:${req.url}, matched:`, matched) - return true // 拦截 + return matched // 拦截 } - return null // 未匹配到任何拦截配置,由下一个拦截器判断 + return null // 不在白名单中,也未配置在拦截功能中,跳过当前拦截器,由下一个拦截器判断 }, createIntercepts: (context) => { const rOptions = context.rOptions From 909228ec37237a47d38ac195e0dac6c97e03c0bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Mon, 28 Oct 2024 17:39:25 +0800 Subject: [PATCH 11/25] =?UTF-8?q?optimize:=20=E6=A0=B7=E5=BC=8F=E5=B0=8F?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/gui/src/view/style/theme/dark.scss | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/gui/src/view/style/theme/dark.scss b/packages/gui/src/view/style/theme/dark.scss index 9a257db..d11c2a1 100644 --- a/packages/gui/src/view/style/theme/dark.scss +++ b/packages/gui/src/view/style/theme/dark.scss @@ -124,9 +124,9 @@ $dark-input: #777; //输入框:背景色 } /* 标签:警告 */ .ant-tag-orange{ - background: #62605e; - border-color: #62605e; - color: #e7aa61; + background: #5a5750; + border-color: #5a5750; + color: #cfa572; } /* 按钮 */ From a66af327c10f5928f78102c3ad4807606c0981b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Wed, 30 Oct 2024 13:06:40 +0800 Subject: [PATCH 12/25] =?UTF-8?q?optimize:=20=E8=AF=B7=E6=B1=82=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E6=97=A5=E5=BF=97=EF=BC=8C=E6=B7=BB=E5=8A=A0=E5=93=8D?= =?UTF-8?q?=E5=BA=94=E7=A0=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js b/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js index 90ac584..f640d4b 100644 --- a/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js +++ b/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js @@ -153,9 +153,9 @@ module.exports = function createRequestHandler (createIntercepts, middlewares, e proxyReq = (rOptions.protocol === 'https:' ? https : http).request(rOptions, (proxyRes) => { const cost = new Date() - start if (rOptions.protocol === 'https:') { - log.info(`代理请求返回: ${url}, cost: ${cost} ms`) + log.info(`代理请求返回: 【${proxyRes.statusCode}】${url}, cost: ${cost} ms`) } else { - log.info(`请求返回: ${url}, cost: ${cost} ms`) + log.info(`请求返回: 【${proxyRes.statusCode}】${url}, cost: ${cost} ms`) } // console.log('request:', proxyReq, proxyReq.socket) From f7e5d58af12ab6c6eef9e993620963dddace0ffa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Thu, 31 Oct 2024 12:17:40 +0800 Subject: [PATCH 13/25] =?UTF-8?q?optimize:=20=E4=BC=98=E5=8C=96=20`respons?= =?UTF-8?q?eReplace`=20=E6=8B=A6=E6=88=AA=E5=99=A8=EF=BC=8C=E5=85=81?= =?UTF-8?q?=E8=AE=B8=E6=9B=BF=E6=8D=A2=E5=A4=9A=E4=B8=AA=E5=90=8C=E5=90=8D?= =?UTF-8?q?=E5=93=8D=E5=BA=94=E5=A4=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/lib/interceptor/impl/res/responseReplace.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/mitmproxy/src/lib/interceptor/impl/res/responseReplace.js b/packages/mitmproxy/src/lib/interceptor/impl/res/responseReplace.js index f848e2e..f9970c9 100644 --- a/packages/mitmproxy/src/lib/interceptor/impl/res/responseReplace.js +++ b/packages/mitmproxy/src/lib/interceptor/impl/res/responseReplace.js @@ -20,6 +20,7 @@ function replaceResponseHeaders (newHeaders, res, proxyRes) { const preHeaders = {} // 替换响应头 + const needDeleteKeys = [] for (let i = 0; i < proxyRes.rawHeaders.length; i += 2) { const headerKey = proxyRes.rawHeaders[i].toLowerCase() @@ -27,15 +28,19 @@ function replaceResponseHeaders (newHeaders, res, proxyRes) { if (newHeaderValue) { if (newHeaderValue !== proxyRes.rawHeaders[i + 1]) { preHeaders[headerKey] = proxyRes.rawHeaders[i + 1] // 先保存原先响应头 - if (newHeaderValue === REMOVE) { // 由于拦截配置中不允许配置null,会被删,所以配置一个[remove],当作删除响应头的意思 + if (newHeaderValue === REMOVE) { // 由于拦截配置中不允许配置null,会被删,所以配置一个 "[remove]",当作删除响应头的意思 proxyRes.rawHeaders[i + 1] = '' } else { proxyRes.rawHeaders[i + 1] = newHeaderValue } } - delete newHeaders[headerKey] + needDeleteKeys.push(headerKey) } } + // 处理删除响应头 + for (const headerKey of needDeleteKeys) { + delete newHeaders[headerKey] + } // 新增响应头 for (const headerKey in newHeaders) { const headerValue = newHeaders[headerKey] From e3e7710ee45ccbabc8e54a215595014e47e37ca0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Fri, 1 Nov 2024 22:05:56 +0800 Subject: [PATCH 14/25] =?UTF-8?q?optimize:=20=E4=BC=98=E5=8C=96=E9=A2=84?= =?UTF-8?q?=E8=AE=BEIP=E7=9B=B8=E5=85=B3=E4=BB=A3=E7=A0=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/gui/src/view/pages/server.vue | 2 +- packages/mitmproxy/src/lib/dns/index.js | 37 +++++++++--------- packages/mitmproxy/src/lib/dns/preset.js | 39 +++++++++++++++++++ .../proxy/mitmproxy/createConnectHandler.js | 2 +- .../proxy/mitmproxy/createRequestHandler.js | 4 +- .../src/lib/proxy/mitmproxy/index.js | 2 +- packages/mitmproxy/src/options.js | 2 +- 7 files changed, 64 insertions(+), 24 deletions(-) create mode 100644 packages/mitmproxy/src/lib/dns/preset.js diff --git a/packages/gui/src/view/pages/server.vue b/packages/gui/src/view/pages/server.vue index af9714f..1e578c1 100644 --- a/packages/gui/src/view/pages/server.vue +++ b/packages/gui/src/view/pages/server.vue @@ -260,7 +260,7 @@ export default { if (!this.config || !this.config.server || !this.config.server.dns || !this.config.server.dns.providers) { return options } - _.forEach(this.config.server.dns.providers, (dnsConf, key) => { + _.forEach(this.config.server.dns.providers, (dnsConfig, key) => { options.push({ value: key, label: key diff --git a/packages/mitmproxy/src/lib/dns/index.js b/packages/mitmproxy/src/lib/dns/index.js index eed0f2c..10ff23d 100644 --- a/packages/mitmproxy/src/lib/dns/index.js +++ b/packages/mitmproxy/src/lib/dns/index.js @@ -1,12 +1,14 @@ const DNSOverTLS = require('./tls.js') const DNSOverHTTPS = require('./https.js') const DNSOverIpAddress = require('./ipaddress.js') +const DNSOverPreSetIpList = require('./preset.js') const matchUtil = require('../../utils/util.match') -const log = require('../../utils/util.log') module.exports = { initDNS (dnsProviders, preSetIpList) { const dnsMap = {} + + // 创建普通的DNS for (const provider in dnsProviders) { const conf = dnsProviders[provider] @@ -22,32 +24,31 @@ module.exports = { dnsMap[provider].name = provider dnsMap[provider].type = conf.type } + + // 创建预设IP的DNS + dnsMap.PreSet = new DNSOverPreSetIpList(preSetIpList) + return dnsMap }, hasDnsLookup (dnsConfig, hostname) { - let providerName = matchUtil.matchHostname(dnsConfig.mapping, hostname, 'get dns providerName') + let providerName = null - // usa已重命名为cloudflare,以下为向下兼容处理 - if (providerName === 'usa' && dnsConfig.providers[providerName] == null) { - providerName = 'cloudflare' + // 先匹配 预设IP配置 + const hostnamePreSetIpList = matchUtil.matchHostname(dnsConfig.preSetIpList, hostname, 'matched preSetIpList') + if (hostnamePreSetIpList) { + return dnsConfig.dnsMap.PreSet } - // 如果为空,尝试从预设IP中匹配,如果配置过预设IP,则随便 - if (providerName == null || dnsConfig.providers[providerName] == null) { - const hostnamePreSetIpList = matchUtil.matchHostname(dnsConfig.preSetIpList, hostname, 'matched preSetIpList') - if (hostnamePreSetIpList) { - for (const name in dnsConfig.providers) { - const provider = dnsConfig.providers[name] - if (provider.type === 'https') { - log.debug(`当前域名未配置过DNS,但配置了预设IP,现返回DNS '${name}' 作为预设IP的使用工具,hostname: ${hostname}, preSetIpList:`, hostnamePreSetIpList) - return dnsConfig.providers[name] - } - } - } + // 再匹配 DNS映射配置 + providerName = matchUtil.matchHostname(dnsConfig.mapping, hostname, 'get dns providerName') + + // 由于DNS中的usa已重命名为cloudflare,所以做以下处理,为了向下兼容 + if (providerName === 'usa' && dnsConfig.dnsMap.usa == null && dnsConfig.dnsMap.cloudflare != null) { + return dnsConfig.dnsMap.cloudflare } if (providerName) { - return dnsConfig.providers[providerName] + return dnsConfig.dnsMap[providerName] } } } diff --git a/packages/mitmproxy/src/lib/dns/preset.js b/packages/mitmproxy/src/lib/dns/preset.js new file mode 100644 index 0000000..69b63f5 --- /dev/null +++ b/packages/mitmproxy/src/lib/dns/preset.js @@ -0,0 +1,39 @@ +const BaseDNS = require('./base') +const matchUtil = require('../../utils/util.match') + +function mapToList (ipMap) { + const ipList = [] + for (const key in ipMap) { + if (!ipMap[key]) continue + ipList.push(ipMap[key]) + } + return ipList +} + +module.exports = class DNSOverPreSetIpList extends BaseDNS { + constructor (preSetIpList) { + super() + this.preSetIpList = preSetIpList + this.name = 'PreSet' + this.type = 'PreSet' + } + + async _lookup (hostname) { + // 获取当前域名的预设IP列表 + let hostnamePreSetIpList = matchUtil.matchHostname(this.preSetIpList, hostname, 'matched preSetIpList') + if (hostnamePreSetIpList && (hostnamePreSetIpList.length > 0 || hostnamePreSetIpList.length === undefined)) { + if (hostnamePreSetIpList.length > 0) { + hostnamePreSetIpList = hostnamePreSetIpList.slice() + } else { + hostnamePreSetIpList = mapToList(hostnamePreSetIpList) + } + + if (hostnamePreSetIpList.length > 0) { + return hostnamePreSetIpList + } + } + + // 未预设当前域名的IP列表 + return [] + } +} diff --git a/packages/mitmproxy/src/lib/proxy/mitmproxy/createConnectHandler.js b/packages/mitmproxy/src/lib/proxy/mitmproxy/createConnectHandler.js index 9590210..f614cd5 100644 --- a/packages/mitmproxy/src/lib/proxy/mitmproxy/createConnectHandler.js +++ b/packages/mitmproxy/src/lib/proxy/mitmproxy/createConnectHandler.js @@ -106,7 +106,7 @@ function connect (req, cltSocket, head, hostname, port, dnsConfig = null, isDire host: hostname, connectTimeout: 10000 } - if (dnsConfig && dnsConfig.providers) { + if (dnsConfig && dnsConfig.dnsMap) { const dns = DnsUtil.hasDnsLookup(dnsConfig, hostname) if (dns) { options.lookup = dnsLookup.createLookupFunc(null, dns, 'connect', hostport, isDnsIntercept) diff --git a/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js b/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js index f640d4b..5c8375b 100644 --- a/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js +++ b/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js @@ -110,10 +110,10 @@ module.exports = function createRequestHandler (createIntercepts, middlewares, e log.info('发起代理请求:', url, (rOptions.servername ? ', sni: ' + rOptions.servername : ''), ', headers:', jsonApi.stringify2(rOptions.headers)) const isDnsIntercept = {} - if (dnsConfig && dnsConfig.providers) { + if (dnsConfig && dnsConfig.dnsMap) { let dns = DnsUtil.hasDnsLookup(dnsConfig, rOptions.hostname) if (!dns && rOptions.servername) { - dns = dnsConfig.providers.quad9 + dns = dnsConfig.dnsMap.quad9 if (dns) { log.info(`域名 ${rOptions.hostname} 在dns中未配置,但使用了 sni: ${rOptions.servername}, 必须使用dns,现默认使用 'quad9' DNS.`) } diff --git a/packages/mitmproxy/src/lib/proxy/mitmproxy/index.js b/packages/mitmproxy/src/lib/proxy/mitmproxy/index.js index 6c0f414..2c4fc26 100644 --- a/packages/mitmproxy/src/lib/proxy/mitmproxy/index.js +++ b/packages/mitmproxy/src/lib/proxy/mitmproxy/index.js @@ -41,7 +41,7 @@ module.exports = { port = ~~port const speedTestConfig = dnsConfig.speedTest - const dnsMap = dnsConfig.providers + const dnsMap = dnsConfig.dnsMap if (speedTestConfig) { const dnsProviders = speedTestConfig.dnsProviders const map = {} diff --git a/packages/mitmproxy/src/options.js b/packages/mitmproxy/src/options.js index 1c6094d..2fa79af 100644 --- a/packages/mitmproxy/src/options.js +++ b/packages/mitmproxy/src/options.js @@ -95,7 +95,7 @@ module.exports = (serverConfig) => { port: serverConfig.port, dnsConfig: { preSetIpList, - providers: dnsUtil.initDNS(serverConfig.dns.providers, preSetIpList), + dnsMap: dnsUtil.initDNS(serverConfig.dns.providers, preSetIpList), mapping: matchUtil.domainMapRegexply(dnsMapping), speedTest: serverConfig.dns.speedTest }, From 2d008a1fbbf6a665ab4fdc295281f5cf2af99dea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Fri, 1 Nov 2024 23:24:26 +0800 Subject: [PATCH 15/25] =?UTF-8?q?optimize:=20=E6=B5=8B=E9=80=9F=E8=B6=85?= =?UTF-8?q?=E8=BF=87200ms=E7=9A=84=EF=BC=8C=E6=98=BE=E7=A4=BA=E4=B8=BA?= =?UTF-8?q?=E9=BB=84=E8=89=B2=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/gui/src/view/pages/server.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gui/src/view/pages/server.vue b/packages/gui/src/view/pages/server.vue index 1e578c1..d2355c1 100644 --- a/packages/gui/src/view/pages/server.vue +++ b/packages/gui/src/view/pages/server.vue @@ -211,7 +211,7 @@ + :color="element.time?(element.time>200?'orange':'green'):'red'" :key='index'> {{ element.host }} {{ element.time }}{{ element.time ? 'ms' : '' }} {{ element.dns }} From 10d75a49a3b964e7d3590a6d3d80e28b2d78a4cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Tue, 5 Nov 2024 11:41:47 +0800 Subject: [PATCH 16/25] =?UTF-8?q?optimize:=20=E6=85=A2=E9=80=9FIP=E7=9A=84?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E5=8F=AF=E9=85=8D=E7=BD=AE=E5=8C=96=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/config/index.js | 5 ++++- packages/gui/src/view/pages/server.vue | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/core/src/config/index.js b/packages/core/src/config/index.js index e1dbbf0..bfa1f4d 100644 --- a/packages/core/src/config/index.js +++ b/packages/core/src/config/index.js @@ -65,7 +65,10 @@ module.exports = { timeout: 20000, keepAliveTimeout: 30000 } - } + }, + + // 慢速IP延迟时间:测速超过该值时,则视为延迟高,显示为橙色 + lowSpeedDelay: 150 }, compatible: { // **** 自定义兼容配置 **** // diff --git a/packages/gui/src/view/pages/server.vue b/packages/gui/src/view/pages/server.vue index d2355c1..b96d7d6 100644 --- a/packages/gui/src/view/pages/server.vue +++ b/packages/gui/src/view/pages/server.vue @@ -211,7 +211,7 @@ + :color="element.time?(element.time>config.server.setting.lowSpeedDelay?'orange':'green'):'red'" :key='index'> {{ element.host }} {{ element.time }}{{ element.time ? 'ms' : '' }} {{ element.dns }} From 48c17b2c703b32c77e269f7f0d49dc165e461a7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Wed, 6 Nov 2024 11:10:41 +0800 Subject: [PATCH 17/25] =?UTF-8?q?=E5=B0=8F=E8=B0=83=E6=95=B4=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/gui/src/view/pages/server.vue | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/gui/src/view/pages/server.vue b/packages/gui/src/view/pages/server.vue index b96d7d6..b5f25e7 100644 --- a/packages/gui/src/view/pages/server.vue +++ b/packages/gui/src/view/pages/server.vue @@ -166,8 +166,11 @@ - ms + ms +
使用以下DNS获取IP进行测速
From 1f3786ac6f41e4ad38b0c248256ce4454ebc4c78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Wed, 6 Nov 2024 11:33:39 +0800 Subject: [PATCH 18/25] =?UTF-8?q?feat:=20=E5=A2=9E=E5=BC=BA=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=EF=BC=8C=E5=85=81=E8=AE=B8=E8=BF=9C=E7=A8=8B=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6=E9=85=8D=E7=BD=AE=E6=9F=90=E4=B8=AA?= =?UTF-8?q?=E5=9F=9F=E5=90=8D=E4=B8=BA=20false=EF=BC=8C=E8=B7=B3=E8=BF=87?= =?UTF-8?q?=20pac.txt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mitmproxy/src/lib/proxy/middleware/overwall.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/mitmproxy/src/lib/proxy/middleware/overwall.js b/packages/mitmproxy/src/lib/proxy/middleware/overwall.js index 50230c7..efee824 100644 --- a/packages/mitmproxy/src/lib/proxy/middleware/overwall.js +++ b/packages/mitmproxy/src/lib/proxy/middleware/overwall.js @@ -10,17 +10,23 @@ const { Buffer } = require('buffer') let pacClient = null function matched (hostname, overWallTargetMap) { + // 匹配配置文件 const ret1 = matchUtil.matchHostname(overWallTargetMap, hostname, 'matched overwall') if (ret1) { - return 'overwall config' + return 'in config' + } else if (ret1 === false || ret1 === 'false') { + log.info(`域名 ${hostname} 的overwall配置为 false,跳过增强功能,即使它在 pac.txt 里`) + return null } + + // 匹配 pac.txt if (pacClient == null) { return null } const ret = pacClient.FindProxyForURL('https://' + hostname, hostname) if (ret && ret.indexOf('PROXY ') === 0) { log.info(`matchHostname: matched overwall: '${hostname}' -> '${ret}' in pac.txt`) - return 'overwall pac' + return 'in pac.txt' } else { log.debug(`matchHostname: matched overwall: Not-Matched '${hostname}' -> '${ret}' in pac.txt`) return null From 784bc05770bc78ab11e096bd532271471d5c58d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Wed, 6 Nov 2024 12:08:05 +0800 Subject: [PATCH 19/25] =?UTF-8?q?feat:=20=E5=A2=9E=E5=BC=BA=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=EF=BC=8C=E5=85=81=E8=AE=B8=E9=85=8D=E7=BD=AE=E6=9F=90?= =?UTF-8?q?=E4=B8=AA=E5=9F=9F=E5=90=8D=E4=B8=BA=20`=E7=A6=81=E7=94=A8`?= =?UTF-8?q?=EF=BC=8C=E8=B7=B3=E8=BF=87=E6=A2=AF=E5=AD=90=EF=BC=8C=E5=8D=B3?= =?UTF-8?q?=E4=BD=BF=E5=AE=83=E6=94=B6=E5=BD=95=E5=9C=A8PAC=E5=86=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gui/src/view/pages/plugin/overwall.vue | 25 ++++++++++++++++--- .../src/lib/proxy/middleware/overwall.js | 2 +- packages/mitmproxy/src/utils/util.match.js | 6 ++--- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/packages/gui/src/view/pages/plugin/overwall.vue b/packages/gui/src/view/pages/plugin/overwall.vue index 725475a..5823797 100644 --- a/packages/gui/src/view/pages/plugin/overwall.vue +++ b/packages/gui/src/view/pages/plugin/overwall.vue @@ -24,7 +24,7 @@ 启用PAC -
PAC内收录了常见的被封杀的域名,当里面某些域名你不想被拦截时,可以关闭PAC
+
PAC内收录了常见的被封杀的域名
当里面某些域名你不想被拦截时,你可以配置这些域名为禁用,也可以关闭PAC
@@ -46,16 +46,23 @@
- PAC没有拦截到的域名,可以在此处定义 + PAC没有拦截到的域名,可以在此处定义;配置为禁用时,将不使用梯子 - + + + + + {{ item.label }} + + + @@ -116,7 +123,17 @@ export default { return { key: 'plugin.overwall', targets: undefined, - servers: undefined + servers: undefined, + overwallOptions: [ + { + value: true, + label: '启用' + }, + { + value: false, + label: '禁用' + } + ] } }, created () { diff --git a/packages/mitmproxy/src/lib/proxy/middleware/overwall.js b/packages/mitmproxy/src/lib/proxy/middleware/overwall.js index efee824..6eedab6 100644 --- a/packages/mitmproxy/src/lib/proxy/middleware/overwall.js +++ b/packages/mitmproxy/src/lib/proxy/middleware/overwall.js @@ -15,7 +15,7 @@ function matched (hostname, overWallTargetMap) { if (ret1) { return 'in config' } else if (ret1 === false || ret1 === 'false') { - log.info(`域名 ${hostname} 的overwall配置为 false,跳过增强功能,即使它在 pac.txt 里`) + log.debug(`域名 ${hostname} 的overwall配置为 false,跳过增强功能,即使它在 pac.txt 里`) return null } diff --git a/packages/mitmproxy/src/utils/util.match.js b/packages/mitmproxy/src/utils/util.match.js index f8fcd5b..3966b8d 100644 --- a/packages/mitmproxy/src/utils/util.match.js +++ b/packages/mitmproxy/src/utils/util.match.js @@ -61,17 +61,17 @@ function matchHostname (hostMap, hostname, action) { // 域名快速匹配:直接匹配 或者 两种前缀通配符匹配 let value = hostMap.origin[hostname] - if (value) { + if (value != null) { log.info(`matchHostname: ${action}: '${hostname}' -> { "${hostname}": ${JSON.stringify(value)} }`) return value // 快速匹配成功 } value = hostMap.origin['*' + hostname] - if (value) { + if (value != null) { log.info(`matchHostname: ${action}: '${hostname}' -> { "*${hostname}": ${JSON.stringify(value)} }`) return value // 快速匹配成功 } value = hostMap.origin['*.' + hostname] - if (value) { + if (value != null) { log.info(`matchHostname: ${action}: '${hostname}' -> { "*.${hostname}": ${JSON.stringify(value)} }`) return value // 快速匹配成功 } From 8a2b114bafb7453fd0d9ab29684f6585ab082b3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Wed, 6 Nov 2024 14:45:29 +0800 Subject: [PATCH 20/25] =?UTF-8?q?feat:=20=E7=BC=93=E5=AD=98=E6=8B=A6?= =?UTF-8?q?=E6=88=AA=E5=99=A8=EF=BC=8C=E5=AF=B9=20`3xx`=20=E7=9A=84?= =?UTF-8?q?=E5=93=8D=E5=BA=94=E4=B9=9F=E7=94=9F=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/mitmproxy/src/lib/interceptor/impl/res/cacheRes.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/mitmproxy/src/lib/interceptor/impl/res/cacheRes.js b/packages/mitmproxy/src/lib/interceptor/impl/res/cacheRes.js index f2f51e1..8f81ba8 100644 --- a/packages/mitmproxy/src/lib/interceptor/impl/res/cacheRes.js +++ b/packages/mitmproxy/src/lib/interceptor/impl/res/cacheRes.js @@ -6,8 +6,10 @@ module.exports = { responseIntercept (context, interceptOpt, req, res, proxyReq, proxyRes, ssl, next) { const { rOptions, log } = context - // 只有GET请求,且响应码为2xx时才进行缓存 - if (rOptions.method !== 'GET' || proxyRes.statusCode < 200 || proxyRes.statusCode >= 300) { + // 只有GET请求,且响应码为 2xx 或 3xx 时才进行缓存 + const minStatusCode = interceptOpt.cacheMinStatusCode || 200 + const maxStatusCode = interceptOpt.cacheMaxStatusCode || 399 + if (rOptions.method !== 'GET' || proxyRes.statusCode < minStatusCode || proxyRes.statusCode > maxStatusCode) { // res.setHeader('DS-Cache-Response-Interceptor', `skip: 'method' or 'status' not match`) return } From 084083129883ed0fdbbaeddf876c0a0eb61835bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Wed, 6 Nov 2024 15:13:50 +0800 Subject: [PATCH 21/25] =?UTF-8?q?feat:=20=E7=BC=93=E5=AD=98=E6=8B=A6?= =?UTF-8?q?=E6=88=AA=E5=99=A8=EF=BC=8C=E5=AF=B9=20`300`=E3=80=81`301`?= =?UTF-8?q?=E3=80=81`302`=20=E7=9A=84=E5=93=8D=E5=BA=94=E4=B9=9F=E7=94=9F?= =?UTF-8?q?=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/mitmproxy/src/lib/interceptor/impl/res/cacheRes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mitmproxy/src/lib/interceptor/impl/res/cacheRes.js b/packages/mitmproxy/src/lib/interceptor/impl/res/cacheRes.js index 8f81ba8..889d669 100644 --- a/packages/mitmproxy/src/lib/interceptor/impl/res/cacheRes.js +++ b/packages/mitmproxy/src/lib/interceptor/impl/res/cacheRes.js @@ -8,7 +8,7 @@ module.exports = { // 只有GET请求,且响应码为 2xx 或 3xx 时才进行缓存 const minStatusCode = interceptOpt.cacheMinStatusCode || 200 - const maxStatusCode = interceptOpt.cacheMaxStatusCode || 399 + const maxStatusCode = interceptOpt.cacheMaxStatusCode || 303 if (rOptions.method !== 'GET' || proxyRes.statusCode < minStatusCode || proxyRes.statusCode > maxStatusCode) { // res.setHeader('DS-Cache-Response-Interceptor', `skip: 'method' or 'status' not match`) return From 35faea4547e15b8a8f920d0dc6c5d4d089602129 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Wed, 6 Nov 2024 15:24:00 +0800 Subject: [PATCH 22/25] =?UTF-8?q?feat:=20=E7=BC=93=E5=AD=98=E6=8B=A6?= =?UTF-8?q?=E6=88=AA=E5=99=A8=EF=BC=8C=E6=96=B0=E5=A2=9E=20`cacheExcludeSt?= =?UTF-8?q?atusCodeList`=20=E7=94=A8=E4=BA=8E=E6=8E=92=E9=99=A4=E6=9F=90?= =?UTF-8?q?=E4=B8=AA=E5=93=8D=E5=BA=94=E7=A0=81=E4=B8=8D=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/lib/interceptor/impl/res/cacheRes.js | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/packages/mitmproxy/src/lib/interceptor/impl/res/cacheRes.js b/packages/mitmproxy/src/lib/interceptor/impl/res/cacheRes.js index 889d669..1fd783d 100644 --- a/packages/mitmproxy/src/lib/interceptor/impl/res/cacheRes.js +++ b/packages/mitmproxy/src/lib/interceptor/impl/res/cacheRes.js @@ -6,10 +6,25 @@ module.exports = { responseIntercept (context, interceptOpt, req, res, proxyReq, proxyRes, ssl, next) { const { rOptions, log } = context - // 只有GET请求,且响应码为 2xx 或 3xx 时才进行缓存 - const minStatusCode = interceptOpt.cacheMinStatusCode || 200 - const maxStatusCode = interceptOpt.cacheMaxStatusCode || 303 - if (rOptions.method !== 'GET' || proxyRes.statusCode < minStatusCode || proxyRes.statusCode > maxStatusCode) { + // 只有GET请求 + if (rOptions.method !== 'GET') { + return + } + + // 判断当前响应码是否不使用缓存 + if (interceptOpt.cacheExcludeStatusCodeList && interceptOpt.cacheExcludeStatusCodeList[proxyRes.statusCode + '']) { + return + } + + // 响应码为 200~303 时才进行缓存(可通过以下两个参数调整范围) + let minStatusCode = interceptOpt.cacheMinStatusCode || 200 + let maxStatusCode = interceptOpt.cacheMaxStatusCode || 303 + if (minStatusCode > maxStatusCode) { + const temp = minStatusCode + minStatusCode = maxStatusCode + maxStatusCode = temp + } + if (proxyRes.statusCode < minStatusCode || proxyRes.statusCode > maxStatusCode) { // res.setHeader('DS-Cache-Response-Interceptor', `skip: 'method' or 'status' not match`) return } From dc11ef5ccf19e95360e3dda2e550609d87776fd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Thu, 7 Nov 2024 11:14:40 +0800 Subject: [PATCH 23/25] =?UTF-8?q?=E5=86=85=E7=BD=AE=E6=96=87=E4=BB=B6=20`d?= =?UTF-8?q?omestic-domain-allowlist.txt=EF=BC=88=E5=9B=BD=E5=86=85?= =?UTF-8?q?=E5=9F=9F=E5=90=8D=E7=99=BD=E5=90=8D=E5=8D=95=EF=BC=89`?= =?UTF-8?q?=E6=9B=B4=E6=96=B0:=20`2024/10/14`=20->=20`2024/11/07`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gui/extra/proxy/domestic-domain-allowlist.txt | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/gui/extra/proxy/domestic-domain-allowlist.txt b/packages/gui/extra/proxy/domestic-domain-allowlist.txt index b745ec9..181d1dc 100644 --- a/packages/gui/extra/proxy/domestic-domain-allowlist.txt +++ b/packages/gui/extra/proxy/domestic-domain-allowlist.txt @@ -1,6 +1,6 @@ [SwitchyOmega Conditions] ; Require: SwitchyOmega >= 2.3.2 -; Update Date: 2024/10/14 +; Update Date: 2024/11/07 ; Author: Pluwen ; Usage: https://github.com/FelisCatus/SwitchyOmega/wiki/RuleListUsage @@ -236,6 +236,8 @@ *.ccb.com *.ccgslb.com *.ccgslb.net +*.cckefu.net +*.cckefu3.com *.cctv.com *.cctvpic.com *.cdn-apple.com @@ -333,6 +335,7 @@ *.dmzj.com *.dns.com *.dnspao.com +*.doc88.com *.docer.com *.docin.com *.docschina.org @@ -395,6 +398,8 @@ *.fiio.com *.fir.im *.firefox.com +*.fj12379.com +*.fjdzyz.com *.fjgdwl.com *.fjhxbank.com *.fliggy.com @@ -471,6 +476,7 @@ *.homestyler.com *.hommk.com *.hongxiu.com +*.honor.com *.hostbuf.com *.hostker.com *.hotmail.com @@ -838,6 +844,7 @@ *.pterclub.com *.pythonclub.org *.qbox.me +*.qcc.com *.qcloud.com *.qcloudcdn.com *.qcwgg.com @@ -883,6 +890,7 @@ *.redacted.ch *.renren.com *.renrenche.com +*.renrendoc.com *.researchgate.net *.rework.tools *.rkecloud.com @@ -966,7 +974,6 @@ *.staticfile.org *.steamcn.com *.steamcontent.com -*.steamdb.info *.subhd.tv *.sui.com *.suning.com From e9c78eb91526a03cd2afb66ced183740fb699ffe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Thu, 7 Nov 2024 11:14:47 +0800 Subject: [PATCH 24/25] v1.8.9 --- lerna.json | 2 +- packages/core/package.json | 4 ++-- packages/gui/package.json | 6 +++--- packages/mitmproxy/package.json | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lerna.json b/lerna.json index d735ae4..cf1a86b 100644 --- a/lerna.json +++ b/lerna.json @@ -14,5 +14,5 @@ "ignore": [] } }, - "version": "1.8.8" + "version": "1.8.9" } diff --git a/packages/core/package.json b/packages/core/package.json index 7d976cb..6dbbdd4 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@docmirror/dev-sidecar", - "version": "1.8.8", + "version": "1.8.9", "description": "给开发者的加速代理工具", "main": "src/index.js", "keywords": [ @@ -17,7 +17,7 @@ "test": "mocha" }, "dependencies": { - "@docmirror/mitmproxy": "^1.8.8", + "@docmirror/mitmproxy": "^1.8.9", "agentkeepalive": "^2.1.1", "babel-preset-es2020": "^1.0.2", "charset": "^1.0.0", diff --git a/packages/gui/package.json b/packages/gui/package.json index 6d6a5ae..12f3648 100644 --- a/packages/gui/package.json +++ b/packages/gui/package.json @@ -1,6 +1,6 @@ { "name": "@docmirror/dev-sidecar-gui", - "version": "1.8.8", + "version": "1.8.9", "private": false, "license": "MPL-2.0", "main": "background.js", @@ -21,8 +21,8 @@ "name": "Greper" }, "dependencies": { - "@docmirror/dev-sidecar": "^1.8.8", - "@docmirror/mitmproxy": "^1.8.8", + "@docmirror/dev-sidecar": "^1.8.9", + "@docmirror/mitmproxy": "^1.8.9", "@mihomo-party/sysproxy": "^2.0.4", "@natmri/platform-napi": "0.0.7", "adm-zip": "^0.5.5", diff --git a/packages/mitmproxy/package.json b/packages/mitmproxy/package.json index 1512675..f87e11e 100644 --- a/packages/mitmproxy/package.json +++ b/packages/mitmproxy/package.json @@ -1,6 +1,6 @@ { "name": "@docmirror/mitmproxy", - "version": "1.8.8", + "version": "1.8.9", "description": "", "main": "src/index.js", "keywords": [ From 935f840ef830a133c9401e312414eee8e0632b56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Thu, 7 Nov 2024 16:34:52 +0800 Subject: [PATCH 25/25] =?UTF-8?q?=E6=97=A5=E5=BF=97=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/mitmproxy/src/lib/proxy/mitmproxy/dnsLookup.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mitmproxy/src/lib/proxy/mitmproxy/dnsLookup.js b/packages/mitmproxy/src/lib/proxy/mitmproxy/dnsLookup.js index 8925f3e..d96019b 100644 --- a/packages/mitmproxy/src/lib/proxy/mitmproxy/dnsLookup.js +++ b/packages/mitmproxy/src/lib/proxy/mitmproxy/dnsLookup.js @@ -16,7 +16,7 @@ module.exports = { callback(null, aliveIpObj.host, 4) return } else { - log.info(`----- ${action}: ${hostname}, no alive ip${target}, tester:`, tester) + log.info(`----- ${action}: ${hostname}, no alive ip${target}, tester: { "ready": ${tester.ready}, "backupList": ${JSON.stringify(tester.backupList)} }`) } } dns.lookup(hostname).then(ip => {