一个 TCP 端口同时处理 socks5 和 http 代理请求,客户端不用记两个端口了。

121 天前
 body007

代码片段: https://gist.github.com/jan-bar/b856c271712a6481260131dd66dd7ffe

测试命令如下

# http CONNECT proxy method
curl -v -x http://127.0.0.1:1080 https://cn.bing.com https://www.baidu.com https://www.sina.com
# http direct proxy method
curl -v -x http://127.0.0.1:1080 cn.bing.com www.baidu.com www.sina.com
# socks5 proxy method
curl -v -x socks5://127.0.0.1:1080 https://cn.bing.com https://www.baidu.com https://www.sina.com
# socks5h proxy method
curl -v -x socks5h://127.0.0.1:1080 https://cn.bing.com https://www.baidu.com https://www.sina.com

还可以在 func proxyDial 方法中添加连接二级代理服务器的代码。

3232 次点击
所在节点    Go 编程语言
13 条回复
sunny352787
121 天前
嗯,这种处理基本是现在的代理标配了,比如 clash: https://github.com/wangtz0607/clash/blob/main/listener/mixed/mixed.go
0o0O0o0O0o
121 天前
我最早是在 @nadoo 的代码里看见的,现在已经是标配了
- /t/375186
- https://github.com/nadoo/glider/blob/668d5bc47038453e7798a6d840f6081058991a3f/mixed.go
body007
120 天前
@sunny352787
@0o0O0o0O0o

看来盯着 shadowsocks 的我落后了,学习了。
jason56
120 天前
nowtunnel 中的代理功能也是这么做的
- 一款不一样的组网、代理工具 https://www.nowtunnel.com
canyue7897
120 天前
请问这种是标准的 http socks 么?这种混合端口如果同时有数据过来,clash 有时候不识别。
body007
120 天前
@canyue7897 这是标准的啊,上面用 curl 命令测试都可以的。代理工具都是我自己写的,没有用过 clash ,不清楚情况。不过看 #1 楼的回复 clash 是支持的。不过记得 http 代理有 2 种模式,可以看代码和 curl 测试命令去理解额。
aladdinding
120 天前
实现原理就是 net.Conn 的包装,先读几个字节匹配协议,然后丢给协议的 listener
DefoliationM
120 天前
socks4 也可以加上,很简单。
bagel
120 天前
拆下包的事,说白了就是这道 leetcode medium: https://leetcode.cn/problems/utf-8-validation
ysc3839
120 天前
@body007 SSR 就支持,不过用了取巧的方法,方法是开个 Privoxy ,数据进来先尝试按 SOCKS 解析,解析失败就转发到 Privoxy ,Privoxy 会尝试按 HTTP 解析,解析成功就转换成 SOCKS 请求再发回来。
body007
120 天前
@DefoliationM 不是很有需求额。我自己用的项目除了 socks5 和 http 代理,还支持 socks5 udp 代理,还支持作为 shadowsocks-rust 的 SIP003 插件(为了支持 shadowsocks-android 的安卓端),也是复用相同 tcp 端口,只是不方便开源😁
body007
120 天前
@ysc3839 如果只是预读数据头部性能应该还可以,如果还处理了部分数据的话那就不太好,还得缓存已处理数据用其他协议再处理一次。
ysc3839
120 天前
@body007 判断 SOCKS 只需要读头部就够了

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

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

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

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

© 2021 V2EX