Ehco1996 / Aioshadowsocks
Licence: gpl-3.0
用 asyncio 重写 shadowsocks ~
Stars: ✭ 126
Programming Languages
python
139335 projects - #7 most used programming language
Labels
Projects that are alternatives of or similar to Aioshadowsocks
Python Proxy
HTTP/HTTP2/HTTP3/Socks4/Socks5/Shadowsocks/ShadowsocksR/SSH/Redirect/Pf TCP/UDP asynchronous tunnel proxy implemented in Python 3 asyncio.
Stars: ✭ 692 (+449.21%)
Mutual labels: asyncio, shadowsocks
Notes
let me know if my notes help you :D (it's a mess, I know)
Stars: ✭ 119 (-5.56%)
Mutual labels: asyncio
Netius
Readable, simple and fast asynchronous non-blocking network apps
Stars: ✭ 114 (-9.52%)
Mutual labels: asyncio
Tgfilestream
A Telegram bot that can stream Telegram files to users over HTTP.
Stars: ✭ 113 (-10.32%)
Mutual labels: asyncio
Aiogram
Is a pretty simple and fully asynchronous framework for Telegram Bot API written in Python 3.7 with asyncio and aiohttp.
Stars: ✭ 2,195 (+1642.06%)
Mutual labels: asyncio
Aioftp
ftp client/server for asyncio (http://aioftp.readthedocs.org)
Stars: ✭ 116 (-7.94%)
Mutual labels: asyncio
Mmp Go
Mega Multiplexer, a single port multi-service relay for shadowsocks. 中转机单端口转发多台shadowsocks服务器。
Stars: ✭ 116 (-7.94%)
Mutual labels: shadowsocks
Ssvpn
V2free for android, a V2ray and Shadowsocks client with many builtin free servers.
Stars: ✭ 121 (-3.97%)
Mutual labels: shadowsocks
Socketry
High-level wrappers for Ruby sockets with advanced thread-safe timeout support
Stars: ✭ 122 (-3.17%)
Mutual labels: asyncio
Purerpc
Asynchronous pure Python gRPC client and server implementation supporting asyncio, uvloop, curio and trio
Stars: ✭ 125 (-0.79%)
Mutual labels: asyncio
aioshadowsocks
用 asyncio 重写 shadowsocks
视频安装教程
使用
- 安装
pip install aioshadowsocks
- 多用户配置
aioshadowsocks 将json作为配置文件, 会读取当前目录下 userconfigs.json
作为默认的配置文件
{
"users": [
{
"user_id": 1,
"port": 2345,
"method": "none",
"password": "hellotheworld1",
"transfer": 104857600,
"speed_limit": 0
},
{
"user_id": 2,
"port": 2346,
"method": "chacha20-ietf-poly1305",
"password": "hellotheworld2",
"transfer": 104857600,
"speed_limit": 384000
}
]
}
同时也支持从http服务器读取配置文件,这时需要注入环境变量 SS_API_ENDPOINT
作为读取配置的api地址
- 注入环境变量
export SS_API_ENDPOINT="https://xxx/com"
- 启动ss服务器
aioss run_ss_server
Docker Version
- install docker
curl -sSL https://get.docker.com/ | sh
- install docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- apply executable permissions
sudo chmod +x /usr/local/bin/docker-compose
- run server
docker-compose up
为什么要重写shadowsocks
主要想通过这个项目的推进来深入了解 asyncio
另外我的一个项目: django-sspanel 依赖 shadowsocksr
但该项目已经停止开发了,所以决定重新造个轮子
主要功能
- tcp/udp 代理
- 流量统计
- 速率控制
- 开放了grpc接口(类似ss-manager)
- 单端口多用户(利用AEAD加密在不破坏协议的情况下实现)
- prometheus/grafana metrics监控 (dashboard在项目的static/grafana/文件夹下)
监控dashboard
性能测试
Shadowsocks本身是一个IO密集行的应用,但是由于加入了AEAD加密,使得SS本身变成了CPU密集行的应用 而Python本身是不太适合CPU密集的场景的,所以在AEAD模式中的表现不佳 PS: 当然,其实是我代码写的烂,python不背锅
- Steam-Cipher-None(不加密 高IO)
- AEAD-Cipher-CHACHA-20(加密 高CPU)
rpc proto
syntax = "proto3";
package aioshadowsocks;
// REQ
message UserIdReq { int32 user_id = 1; }
message PortReq { int32 port = 1; }
message UserReq {
int32 user_id = 1;
int32 port = 2;
string method = 3;
string password = 4;
bool enable = 5;
}
// RES
message Empty {}
message User {
int32 user_id = 1;
int32 port = 2;
string method = 3;
string password = 4;
bool enable = 5;
int32 speed_limit = 6;
int32 access_order = 7;
bool need_sync = 8;
repeated string ip_list = 9;
int32 tcp_conn_num = 10;
int64 upload_traffic = 11;
int64 download_traffic = 12;
}
// service
service ss {
rpc CreateUser(UserReq) returns (User) {}
rpc UpdateUser(UserReq) returns (User) {}
rpc GetUser(UserIdReq) returns (User) {}
rpc DeleteUser(UserIdReq) returns (Empty) {}
}
Note that the project description data, including the texts, logos, images, and/or trademarks,
for each open source project belongs to its rightful owner.
If you wish to add or remove any projects, please contact us at [email protected].