From 9d12aa45163be2faf604cec6a26b50e65ec7609b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=8E=8B=E8=89=AF?= <841369634@qq.com>
Date: Wed, 11 Sep 2024 18:27:48 +0800
Subject: [PATCH] =?UTF-8?q?feature:=20=E8=AF=B7=E6=B1=82=E8=B6=85=E6=97=B6?=
=?UTF-8?q?=E6=97=B6=E9=97=B4=E5=92=8C=E8=BF=9E=E6=8E=A5=E8=B6=85=E6=97=B6?=
=?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 | 2 +
packages/gui/src/view/pages/server.vue | 12 ++++-
.../mitmproxy/src/lib/proxy/common/util.js | 48 ++++++++++++++++---
.../proxy/mitmproxy/createRequestHandler.js | 2 +-
4 files changed, 55 insertions(+), 9 deletions(-)
diff --git a/packages/core/src/config/index.js b/packages/core/src/config/index.js
index e0be0d7..ddb7438 100644
--- a/packages/core/src/config/index.js
+++ b/packages/core/src/config/index.js
@@ -44,6 +44,8 @@ module.exports = {
setting: {
NODE_TLS_REJECT_UNAUTHORIZED: true,
verifySsl: true,
+ timeout: 20000, // 代理请求超时时间
+ keepAliveTimeout: 30000, // socket连接的超时时间
script: {
enabled: true,
defaultDir: './extra/scripts/'
diff --git a/packages/gui/src/view/pages/server.vue b/packages/gui/src/view/pages/server.vue
index d7f5a83..47062aa 100644
--- a/packages/gui/src/view/pages/server.vue
+++ b/packages/gui/src/view/pages/server.vue
@@ -36,6 +36,14 @@
修改后需要重启应用
+
+
+ ms,对应 timeout 属性
+
+
+ ms,对应 keepAliveTimeout 属性
+
+
NODE_TLS_REJECT_UNAUTHORIZED
@@ -54,6 +62,7 @@
+
启用拦截
@@ -136,8 +145,7 @@
-
- ms
+ ms
使用以下dns获取ip进行测速
diff --git a/packages/mitmproxy/src/lib/proxy/common/util.js b/packages/mitmproxy/src/lib/proxy/common/util.js
index 0dd89c8..f5e2198 100644
--- a/packages/mitmproxy/src/lib/proxy/common/util.js
+++ b/packages/mitmproxy/src/lib/proxy/common/util.js
@@ -15,10 +15,50 @@ const httpAgent = new Agent({
timeout: 20000,
keepAliveTimeout: 30000 // free socket keepalive for 30 seconds
})
+const httpsAgentCache = {}
+const httpAgentCache = {}
+
let socketId = 0
let httpsOverHttpAgent, httpOverHttpsAgent, httpsOverHttpsAgent
+function createHttpsAgent (serverSetting) {
+ const key = (serverSetting.timeout || 20000) + '-' + (serverSetting.keepAliveTimeout || 30000)
+ if (!httpsAgentCache[key]) {
+ httpsAgentCache[key] = new HttpsAgent({
+ keepAlive: true,
+ timeout: serverSetting.timeout || 20000,
+ keepAliveTimeout: serverSetting.keepAliveTimeout || 30000,
+ rejectUnauthorized: false
+ })
+ }
+ return httpsAgentCache[key]
+}
+
+function createHttpAgent (serverSetting) {
+ const key = (serverSetting.timeout || 20000) + '-' + (serverSetting.keepAliveTimeout || 30000)
+ if (!httpAgentCache[key]) {
+ httpAgentCache[key] = new Agent({
+ keepAlive: true,
+ timeout: serverSetting.timeout || 20000,
+ keepAliveTimeout: serverSetting.keepAliveTimeout || 30000
+ })
+ }
+ return httpAgentCache[key]
+}
+
+function createAgent (protocol, serverSetting) {
+ if (protocol === 'https:') {
+ return !serverSetting || (serverSetting.timeout === 20000 && serverSetting.keepAliveTimeout === 30000)
+ ? httpsAgent
+ : createHttpsAgent(serverSetting)
+ } else {
+ return !serverSetting || (serverSetting.timeout === 20000 && serverSetting.keepAliveTimeout === 30000)
+ ? httpAgent
+ : createHttpAgent(serverSetting)
+ }
+}
+
util.parseHostnameAndPort = (host, defaultPort) => {
let arr = host.match(/^(\[[^\]]+\])(?::(\d+))?$/) // 尝试解析IPv6
if (arr) {
@@ -42,7 +82,7 @@ util.parseHostnameAndPort = (host, defaultPort) => {
return arr
}
-util.getOptionsFromRequest = (req, ssl, externalProxy = null) => {
+util.getOptionsFromRequest = (req, ssl, externalProxy = null, serverSetting) => {
// eslint-disable-next-line node/no-deprecated-api
const urlObject = url.parse(req.url)
const defaultPort = ssl ? 443 : 80
@@ -67,11 +107,7 @@ util.getOptionsFromRequest = (req, ssl, externalProxy = null) => {
if (!externalProxyUrl) {
// keepAlive
if (headers.connection !== 'close') {
- if (protocol === 'https:') {
- agent = httpsAgent
- } else {
- agent = httpAgent
- }
+ agent = createAgent(protocol, serverSetting)
headers.connection = 'keep-alive'
} else {
agent = false
diff --git a/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js b/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js
index 98e1bc1..1ee5edc 100644
--- a/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js
+++ b/packages/mitmproxy/src/lib/proxy/mitmproxy/createRequestHandler.js
@@ -15,7 +15,7 @@ module.exports = function createRequestHandler (createIntercepts, middlewares, e
return function requestHandler (req, res, ssl) {
let proxyReq
- const rOptions = commonUtil.getOptionsFromRequest(req, ssl, externalProxy)
+ const rOptions = commonUtil.getOptionsFromRequest(req, ssl, externalProxy, setting)
if (rOptions.agent) {
rOptions.agent.options.rejectUnauthorized = setting.verifySsl