创建: 2023-08-29 19:02
https://scz.617.cn/network/202308291902.txt目录:
☆ 背景介绍
☆ Privoxy
☆ pproxy
☆ gost
☆ 参考资源
☆ 背景介绍
现在加密SOCKS5代理很普遍,HTTP(S)代理已经逐渐退出历史舞台,但总有一些场景只支持HTTP代理、不支持SOCKS5代理。有时需要在不同代理之间进行类型转换,不只是SOCKS5转HTTP,也可能是HTTP转SOCKS5,或其他类型转换。在此过程中,意外发现一些相当不错的成熟工具,遂记之。本文将迭代更新,不再单开新篇。
☆ Privoxy
参[1],Privoxy可将SOCKS5代理转成HTTP代理。这是古老工具,用了很多年,时至今日仍能工作。出于完备性考虑,也记于此间。
当前最新稳定版是3.0.34,有绿色便携版,一个zip文件解压到任意目录。编辑解压目录下的config.txt,搜"listen-address 127.0.0.1:8118",注释掉该行,加入如下行:
listen-address <downstream>:<port>
forward-socks5 / <upstream>:<port> .
此处假设"upstream:port"是加密SOCKS5代理,执行privoxy.exe,之后"downstream:port"将提供HTTP代理,可用IE测试该HTTP代理可用。
☆ pproxy
参[2],pproxy可在同一端口同时提供多种类型代理,可让downstream是SOCKS5代理、upstream是HTTP代理,相比之下,Privoxy只能将HTTP代理转成SOCKS5代理。
安装:
pip3 install pproxy
查看帮助:
$ pproxy -h
$ python3 -m pproxy -husage: pproxy [-h] [-l LISTEN] [-r RSERVER] [-ul ULISTEN] [-ur URSERVER] [-b BLOCK] [-a ALIVED] [-s {fa,rr,rc,lc}] [-d] [-v]
[--ssl SSLFILE] [--pac PAC] [--get GETS] [--auth AUTHTIME] [--sys] [--reuse] [--daemon] [--test TEST] [--version]
Proxy server that can tunnel among remote servers by regex rules. Supported protocols:
http,socks4,socks5,shadowsocks,shadowsocksr,redirect,pf,tunnel
options:
-h, --help show this help message and exit
-l LISTEN tcp server uri (default: http+socks4+socks5://:8080/)
-r RSERVER tcp remote server uri (default: direct)
-ul ULISTEN udp server setting uri (default: none)
-ur URSERVER udp remote server uri (default: direct)
-b BLOCK block regex rules
-a ALIVED interval to check remote alive (default: no check)
-s {fa,rr,rc,lc} scheduling algorithm (default: first_available)
-d turn on debug to see tracebacks (default: no debug)
-v print verbose output
--ssl SSLFILE certfile[,keyfile] if server listen in ssl mode
--pac PAC http PAC path
--get GETS http custom {path,file}
--auth AUTHTIME re-auth time interval for same ip (default: 86400*30)
--sys change system proxy setting (mac, windows)
--reuse set SO_REUSEPORT (Linux only)
--daemon run as a daemon (Linux only)
--test TEST test this url for all remote proxies and exit
--version show program's version number and exit
极简示例:
pproxy -v -l http+socks4+socks5://<downstream>:<port> -r http://<upstream>:<port>
上例将暴露出downstream,在同一端口上提供HTTP、SOCKS4、SOCKS5代理,其upstream是HTTP代理。没这需求的,不要问使用场景是什么。
测试downstream:
curl --proxy http://<downstream>:<port> -k https://ip4.me
curl --proxy socks4://<downstream>:<port> -k https://api.ipify.org
curl --proxy socks5h://<downstream>:<port> -k https://myexternalip.com/raw
官方文档有更多复杂示例,代理类型转换只是它的副作用,强烈建议遍历官方文档。pproxy实在太好用了,Windows用户有必要转成便携版单独一个EXE用。
☆ gost
在微博上推荐pproxy,网友UID(1762568450)在评论区提及gost,看了一下,同属神器,参[3]。
gost类似pproxy,只不过用Go开发的。同样可在同一端口同时提供多种类型代理,比如让downstream是SOCKS5代理、upstream是HTTP代理。
gost -L=<downstream>:<port> -F=http://<upstream>:<port>
gost -L=auto://<downstream>:<port> -F=http://<upstream>:<port>
gost -L=socks5h+http://<downstream>:<port> -F=http://<upstream>:<port>
测试downstream:
curl --proxy socks5h://<downstream>:<port> -k https://api.ipify.org
curl --proxy http://<downstream>:<port> -k https://myexternalip.com/raw
"gost -L"中socks4a不可与socks5h、http同时出现,否则要么socks4a不如愿工作,要么其他类型代理不如愿工作,可能是BUG。socks4a单独使用没问题。
gost -L=socks4a://<downstream>:<port> -F=http://<upstream>:<port>
测试downstream:
curl --proxy socks4a://<downstream>:<port> -k https://ip4.me
官方文档有更多复杂示例,代理类型转换只是它的副作用,强烈建议遍历官方文档。相比pproxy,gost的优势是更容易得到gost.exe,在Windows中使用。Go语言提供了跨平台交叉编译支持,可在Linux中编译获取Windows中运行的PE,我已经爽上了。
粗略看了一下,pproxy、gost的作者好像都是中国人,不愧是活在寡妇王凝视下的弗力曼战士,太优秀啦!
☆ 参考资源
[1] Privoxy
https://www.privoxy.org/[2] python-proxy
https://github.com/qwj/python-proxy
[3] GO Simple Tunnel
https://github.com/ginuerzh/gost/