Skip to content
/ suo5 Public
forked from zema1/suo5

一款高性能 HTTP 代理隧道工具 | A high-performance http proxy tunneling tool

License

Notifications You must be signed in to change notification settings

8990679/suo5

This branch is 16 commits behind zema1/suo5:main.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Nov 7, 2024
93faa01 · Nov 7, 2024
Nov 7, 2024
Aug 27, 2024
Sep 30, 2024
Nov 7, 2024
Dec 15, 2023
Apr 10, 2023
Feb 21, 2023
Feb 19, 2023
Aug 28, 2024
Dec 18, 2023
Feb 22, 2023
Aug 25, 2024
Jul 1, 2024
Sep 30, 2024
Sep 30, 2024
Sep 30, 2024

Repository files navigation

Suo5

一款高性能 HTTP 代理隧道工具

License Workflow Status Workflow Status Latest release

experience

中文 | English


suo5 是一个高性能 HTTP 隧道代理工具,它基于双向的 Chunked-Encoding 构建, 相比 Neo-reGeorg 等传统隧道工具, suo5 的性能可以达到其数十倍。查看 性能测试

其主要特性如下:

  • 同时支持全双工与半双工模式,传输性能接近 FRP
  • 支持在 Nginx 反向代理和负载均衡场景使用
  • 支持 Java4 ~ Java 21 全版本和各大主流中间件服务
  • 支持 IIS .Net Framework >= 2.0 的所有版本
  • 完善的连接控制和并发管理,使用流畅丝滑
  • 同时提供提供命令行和图形化界面

原理介绍 https://koalr.me/posts/suo5-a-hign-performace-http-socks/

免责声明:此工具仅限于安全研究,用户承担因使用此工具而导致的所有法律和相关责任!作者不承担任何法律责任!

安装运行

前往 Releases 下载编译好的二进制,其中带 gui 的版本是界面版,不带 gui 的为命令行版。所有编译由 Github Action 自动构建,请放心使用。

使用时需上传 服务端 到目标环境中并确保正常执行。

界面版

界面版基于 wails 实现,依赖 Webview2 框架。Windows 11 和 MacOS 已自带该组件,其他系统会弹框请允许下载安装,否则无法使用。

gui.png

命令行

USAGE:
   suo5 [global options] command [command options] [arguments...]

GLOBAL OPTIONS:
   --target value, -t value                               the remote server url, ex: http://localhost:8080/suo5.jsp
   --listen value, -l value                               listen address of socks5 server (default: "127.0.0.1:1111")
   --method value, -m value                               http request method (default: "POST")
   --redirect value, -r value                             redirect to the url if host not matched, used to bypass load balance
   --no-auth                                              disable socks5 authentication (default: true)
   --auth value                                           socks5 creds, username:password, leave empty to auto generate
   --mode value                                           connection mode, choices are auto, full, half (default: "auto")
   --ua value                                             set the request User-Agent (default: "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.1.2.3")
   --header value, -H value [ --header value, -H value ]  use extra header, ex -H 'Cookie: abc'
   --timeout value                                        request timeout in seconds (default: 10)
   --buf-size value                                       request max body size (default: 327680)
   --proxy value                                          set upstream proxy, support socks5/http(s), eg: socks5://127.0.0.1:7890
   --debug, -d                                            debug the traffic, print more details (default: false)
   --no-heartbeat, --nh                                   disable heartbeat to the remote server which will send data every 5s (default: false)
   --no-gzip, --ng                                        disable gzip compression, which will improve compatibility with some old servers (default: false)
   --jar, -j                                              enable cookiejar (default: false)
   --help, -h                                             show help
   --version, -v                                          print the version

命令行版本与界面版配置完全一致,可以对照界面版功能来使用,最简单的只需指定连接目标

$ ./suo5 -t https://example.com/proxy.jsp

使用 GET 方法发送请求,有时可以绕过限制

$ ./suo5 -m GET -t https://example.com/proxy.jsp

自定义 socks5 监听在 0.0.0.0:7788,并自定义认证信息为 test:test123

$ ./suo5 -t https://example.com/proxy.jsp -l 0.0.0.0:7788 --auth test:test123

负载均衡场景下将流量转发到某一个固定的 url 解决请求被分散的问题,需要尽可能的在每一个后端服务中上传 suo5。 它的原理是判断 -r 中 URL 的 IP 是否与服务器的网卡 IP 匹配,不匹配则转发。

$ ./suo5 -t https://example.com/proxy.jsp -r http://172.0.3.2/code/proxy.jsp

配置域名/IP过滤规则,避免无意义的域名被代理, 命中规则的连接会直接被 reset 掉

# example.com 和 google.com 这两个域名不走代理
$ ./suo5 -t https://example.com/proxy.jsp -E example.com -E google.com

# 也可以将域名列表放在文件里,一行一个
$ ./suo5 -t https://example.com/proxy.jsp -ef ./excludes.txt

# 注意: 如果你配置的是域名,你需要确保 suo5 代理拿到的是域名,而不是解析好的 ip, 否则不会生效, 例如:
# 已经解析成 IP:  curl -v -x 'socks5://127.0.0.1:1111' https://example.com
# 仍然是域名:  curl -v -x 'socks5h://127.0.0.1:1111' https://example.com

特别提醒

User-Agent (ua) 的配置本地端与服务端是绑定的,如果修改了其中一个,另一个也必须对应修改才能连接上, 你可以将这个作为连接密码使用。

配置文件

配置文件的定义来自 ctrl.Suo5Config, 完整的配置如下:

{
  "method": "POST",
  "listen": "127.0.0.1:1111",
  "target": "",
  "no_auth": true,
  "username": "",
  "password": "",
  "mode": "auto",
  "buffer_size": 327680,
  "timeout": 10,
  "debug": false,
  "upstream_proxy": "",
  "redirect_url": "",
  "raw_header": [
    "User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.1.2.3"
  ],
  "disable_heartbeat": false,
  "disable_gzip": false,
  "disable_cookiejar": true,
  "exclude_domain": null
}

GUI 版本可以使用界面 导入配置导出配置 功能来导入和导出配置文件。cli 版本可以使用 -c 参数来指定配置文件。 GUI 导出的配置文件也可以给命令行使用,两者的格式是一样的。

常见问题

  1. 什么是全双工和半双工?

    全双工 仅需发送一个 HTTP 请求即可构建出一个 HTTP 隧道, 实现 TCP 的双向通信。可以理解成这个请求既是一个上传请求又是一个下载请求,只要连接不断开 ,就会一直下载,一直上传, 便可以借此做双向通信。

    半双工 在部分场景下不支持 全双工 模式(比如有反代),可以退而求其次做半双工,即发送一个请求构建一个下行的隧道,同时用短链接发送上行数据一次来完成双向通信。

  2. suo5Neo-reGeorg 怎么选?

    如果目标是 Java 的站点,可以使用 suo5 来构建 http 隧道,大多数情况下 suo5 都要比 neo 更稳定速度更快。但 neo 提供了非常多种类的服务端支持,兼容性很好,而且也支持一些 suo5 当前还在开发的功能,也支持更灵活的定制化。

接下来

  • 支持配置上游 socks 代理
  • 支持负载均衡的场景
  • 支持 .Net 的类型
  • 流量特征去除

参考

其他

扫码加我拉进讨论群,请备注申请理由为:问题反馈与讨论,否则不通过

wechat

About

一款高性能 HTTP 代理隧道工具 | A high-performance http proxy tunneling tool

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 37.2%
  • Go 28.5%
  • C# 9.9%
  • ASP.NET 8.2%
  • Vue 7.0%
  • JavaScript 3.8%
  • Other 5.4%