mitmproxy 太慢了,有没有性能更好的替代品?

2022-02-19 17:45:04 +08:00
 smilebaby

最近在使用 mitmproxy 作为中间人代理服务器做一些对 https 请求和响应的中间修改。现在的问题是 mitmproxy 非常慢 , 在请求到达和响应完成都会增加几百毫秒的延迟,问问大家有没有这样一款代理服务器:

1.像 mitmproxy 也可以有插件机制的 https 代理服务器。 2.性能快一点,真正的请求以外的浪费尽量少;能支持 https 长链接,不要每次请求好像都要重新握手。

7383 次点击
所在节点    Python
37 条回复
jerryjhou
2022-02-19 17:56:09 +08:00
把证书验证取消能降低延迟,你敢吗
smilebaby
2022-02-19 18:03:13 +08:00
@jerryjhou 必须要走 https ,因为浏览器要跑 https 的网页。这种情况能 把证书验证取取消 ? 能否详细说说 已经信任了 mitmproxy 的证书了,我感觉没啥不敢的。
dcty
2022-02-19 18:08:10 +08:00
Mac 的话试试看 surge
smilebaby
2022-02-19 18:14:42 +08:00
@dcty 谢谢,由于 IE 等问题,希望 是 能有个 windows 上可用的。
jerryjhou
2022-02-19 18:19:05 +08:00
@smilebaby 取消验证不是指浏览器不验证证书,是让 Mitmproxy 不再验证远程服务器的证书
中间人的工作原理肯定会有额外延迟
haoliang
2022-02-19 18:20:39 +08:00
openresty?
smilebaby
2022-02-19 18:23:00 +08:00
@jerryjhou 非常有用!具体是怎么操作?
ch2
2022-02-19 18:25:58 +08:00
Fiddler 自带的 Jscript
smilebaby
2022-02-19 18:28:06 +08:00
@ch2 感觉 fiddler 界面很重,也不快, 插件还不支持 python 。
also24
2022-02-19 18:31:19 +08:00
@jerryjhou #5
看了你这条,去翻了下文档,发现 mitmproxy 有个 "Upstream Certificate Sniffing" 的功能,感觉这个功能会大大的增加延迟。
https://docs.mitmproxy.org/stable/concepts-certificates/#upstream-certificate-sniffing


这个功能可以通过选项 upstream_cert 来关闭。


@smilebaby #7
可以通过 ssl_insecure 选项关闭对上游证书的验证,不过我觉得可以先试一下我前面提到的 upstream_cert 选项

https://docs.mitmproxy.org/stable/concepts-options/
smilebaby
2022-02-19 18:38:25 +08:00
@also24 @jerryjhou 多谢两位。我还不太熟悉这个 mitmproxy ,upstream_cert ssl_insecure 这两项 具体怎么设置 ? 我现在的程序是这样启动的 mitmproxy.main.mitmdump( ['-q','-s',__file__,'-p','9999','--insecure'] )
also24
2022-02-19 18:48:01 +08:00
@smilebaby #11
你的 mintmproxy 版本是? --insecure 应该是旧版本的选项,对应新版本的 --ssl-insecure

至于 upstream_cert ,应该使用 --set upstream_cert=false
smilebaby
2022-02-19 18:58:34 +08:00
@also24 谢谢!因为要在 py2 上跑,用了个低版本。我刚想起来,题目里没说清楚,其实我大部分情况是自己造一个响应,所以不请求真正的服务器。现在要解决的是浏览器和代理间的性能问题,哪怕同一台机器上,也像附言里看到的浪费太多时间。浏览器和代理间能保持长链接吗?
wuruxu
2022-02-19 19:30:30 +08:00
看看这个用 C 实现的
https://github.com/droe/sslsplit
zer
2022-02-19 19:46:04 +08:00
试过 charles 吗?
ly841000
2022-02-19 20:19:32 +08:00
也用过 mitmproxy ,不仅慢,还有内存泄漏,时间长了连不上等问题,体验很差,
后来用 c# Titanium.Web.Proxy 库,只对需要修改的 Host 代理,其它的直连,好用太多了
ETiV
2022-02-19 20:38:37 +08:00
你得说说你本质的需求

至少这些年我用它下来没觉得它慢过,因为我根本不会在意响应到达客户端的延迟 🤣

mitmproxy 在设计上是为了能够劫持并修改内容的,修改内容这一部分就需要等待内容全部下载回来后再触发的钩子。。然后它再将这些内容吐回给请求端。

这中间必然有延迟,或者说增加了请求端的「首字节响应时间」
smilebaby
2022-02-19 21:43:13 +08:00
@ETiV 对,我的问题开始没有说清楚。我的问题实际是目前看浏览器和代理之间没有维持一个长链接,导致每次请求浪费在浏览器和代理之间的时间太多。第一次请求慢可以接受,对真正目标的访问更不重要,因为数据是自己组织的,或者可以不用 mitmproxy 获取。
smilebaby
2022-02-19 21:45:34 +08:00
@ly841000 谢谢推荐。
smilebaby
2022-02-19 21:46:20 +08:00
@wuruxu 需要 Windows 下插件支持,谢谢推荐。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/835061

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX