代码片段: 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 方法中添加连接二级代理服务器的代码。
1
sunny352787 84 天前
嗯,这种处理基本是现在的代理标配了,比如 clash: https://github.com/wangtz0607/clash/blob/main/listener/mixed/mixed.go
|
2
0o0O0o0O0o 84 天前 1
我最早是在 @nadoo 的代码里看见的,现在已经是标配了
- /t/375186 - https://github.com/nadoo/glider/blob/668d5bc47038453e7798a6d840f6081058991a3f/mixed.go |
3
body007 OP |
4
jason56 84 天前
nowtunnel 中的代理功能也是这么做的
- 一款不一样的组网、代理工具 https://www.nowtunnel.com |
5
canyue7897 84 天前 via Android
请问这种是标准的 http socks 么?这种混合端口如果同时有数据过来,clash 有时候不识别。
|
6
body007 OP @canyue7897 这是标准的啊,上面用 curl 命令测试都可以的。代理工具都是我自己写的,没有用过 clash ,不清楚情况。不过看 #1 楼的回复 clash 是支持的。不过记得 http 代理有 2 种模式,可以看代码和 curl 测试命令去理解额。
|
7
aladdinding 84 天前
实现原理就是 net.Conn 的包装,先读几个字节匹配协议,然后丢给协议的 listener
|
8
DefoliationM 84 天前 via Android
socks4 也可以加上,很简单。
|
9
bagel 84 天前
拆下包的事,说白了就是这道 leetcode medium: https://leetcode.cn/problems/utf-8-validation
|
10
ysc3839 84 天前 via Android
@body007 SSR 就支持,不过用了取巧的方法,方法是开个 Privoxy ,数据进来先尝试按 SOCKS 解析,解析失败就转发到 Privoxy ,Privoxy 会尝试按 HTTP 解析,解析成功就转换成 SOCKS 请求再发回来。
|
11
body007 OP @DefoliationM 不是很有需求额。我自己用的项目除了 socks5 和 http 代理,还支持 socks5 udp 代理,还支持作为 shadowsocks-rust 的 SIP003 插件(为了支持 shadowsocks-android 的安卓端),也是复用相同 tcp 端口,只是不方便开源😁
|