是一个基于 socks5 协议的代理客户端,意图在于支持多种类型的代理服务。 C 语言编写,轻量,支持类 unix 系统(Linux/WSL/BSDs/OSX)。
中文 | English
与其他大多数支持多协议的客户端不同,pegasocks 不依赖各种第三方 core(比如 v2ray-core 等),而是真的去实现相关协议的拆装,并且尽可能的照顾性能。因此它
- 🍃 足够轻量,没有 QT 或是 boost 或是其他第三方二进制的依赖。
- 🚀 性能优先,默认多个 worker 线程,因此理论上吞吐量会比较高(待benchmark)
- 🚥 这是一个 learn by doing 项目,欢迎大家 review 代码,提供优化思路和 C 语言编程相关的指导。
- ❌ 没有 GUI,可以直接配合 systemd, launchd, rc 或是各种自定义脚本配置开机启动。后期计划开发一个简单的 tray indicator,在系统的托盘里显示,并且提供一些简单的交互,总之重型的 GUI 是不在考虑范围内的。
- openssl 1.1.1 / mbedtls 2.27.0
- libevent2.12 (OSX 上需要最新版本)
- pcre (lagacy) 可选的,开启 ACL 支持时会需要它
其他依赖通过 git submodule 来进行管理,因此需要在获取代码后
git submodule update --init
或者在 clone 代码时添加 --recursive
参数
如果你使用 Arch Linux,可以使用 aur 进行安装
yay -S pegasocks-git --overwrite /usr/local/bin/pegas,/usr/local/share/pegasocks/*
或者直接编译如下
使用 cmake
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DWITH_ACL=ON -DUSE_JEMALLOC=ON .. && make
选项 | 含义 | 默认值 |
---|---|---|
-DUSE_MBEDTLS | 是否使用 mbedtls 代替 openssl | OFF |
-DUSE_JEMALLOC | 是否使用 jemalloc | OFF |
-DUSE_STATIC | 是否采用 static link | OFF |
-DWITH_ACL | 是否打开 ACL 支持 (这会增加 libcork/ipset/pcre 的依赖,因此会增加程序最终的大小) | OFF |
-DWITH_APPLET | 是否开启系统托盘支持 (这会依赖平台相关的一些系统库,因此会增加程序最终的大小) | OFF |
另外可以通过以下参数自定义 JeMalloc/Libevent2/MbedTLS/OpenSSLx/PCRE 的寻找根目录
-DOpenSSLx_ROOT=/xxxxxx/xxx/xxx 指定 openssl root
-DLibevent2_ROOT=xxxxxx 指定 libevent root
以此类推
pegas -c config.json -t 4
-c
指定配置文件,默认会依次尝试$XDG_CONFIG_HOME/.pegasrc
或者$XDG_CONFIG_HOME/pegas/config
-t
指定工作线程数量,默认为 4-a
指定 ACL 文件,在开启 ACL 支持后生效
通过指定配置文件的 "control_port" 或是 "control_file" 字段,开启 TCP 端口或者 unix socket 和程序进行交互,配合 netcat / socat 与相关的端口或是文件进行交互,支持以下两个命令
GET SERVERS
,返回服务器的信息SET SERVER $idx
,设置当前服务器
在 linux 下 socat 演示
开启系统托盘时,直接使用托盘进行交互,见下
默认编译二进制文件不带 GUI,带上参数 -DWITH_APPLET=ON
开启系统托盘功能。
cmake -DCMAKE_BUILD_TYPE=Release -DWITH_APPLET=ON .. && make
从命令行启动时,将 logo/icon.svg
放到 pegas 同级目录,然后正常使用即可。
OSX上,默认会将二进制打包成 app bundle,直接将打包出的 build/PegasApp.app
复制到应用程序即可。
- 系统安装了最新的 libevent (手动编译 libevent master 分支,不要通过 homebrew,后者提供的是 libevent2.12,在 mac 下会遇到这个问题)
- 是否有 配置文件,app bundle 会检测
~/.config/.pegasrc
或者~/.config/pegas/config