Python实现的极简的socks5服务端
项目介绍
本项目是基于socks5协议的代理服务端,突破本地的网络限制。本项目只支持纯生的socks5协议,传递的信息都为明文传递,无任何加密。如果轻量级使用仅需在浏览器端安装SwitchyOmega等可以配置socks5连接的插件即可快速配置进行代理。如果为代理重度使用者请移步shadowsocks或shadowsocksr。
使用说明
服务端安装环境
Python3.6及以上(windows端和ubuntu端可完美运行),跑的是本项目的Python脚本。
git clone https://github.com/woodyxiong/TinySocks5.git
python main.py -p [port]
客户端安装配置
首先安装SwitchyOmega插件
国产浏览器操作如下(以qq浏览器为例)
打开应用中心并下载
SwitchyOmega
点击应用中心按钮并进入应用中心

从应用中心安装SwitchyOmega

配置代理
新建socks5代理,情景模式名称随意

配置代理 代理协议选择socks5,代理服务器填写部署的ip或者域名,代理端口填写代理服务器监听的端口

进阶操作:配置自动模式
设置符合规则的进入socks5代理服务器,若没有进入规则则选择直接连接即可
规则列表网址为gfwlist项目
https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt

最后点击自动模式完成配置
大功告成

原理介绍
结构示意图如下

文件简介
- main.py 主函数入口文件
- shell.py 分析以及输出shell指令
- eventloop.py 程序的主循环
- controller.py 程序控制器
- tcprelay.py 内容分发类
原理分析
首先进入main.py,从这里分发到shell.py来解析端口、用户名、密码等配置信息。
再继续生成Controller和EventLoop类,Controller是socks5服务器端,用于监控浏览器发送的socks5请求,并且将监控的可读事件注册到EventLoop类对其进行监控。
EventLoop一直循环监控可读事件、可写事件、错误事件。
如果有浏览器客户端与Controller相连,则生成Tcprelay类,此类有local_sock用于与浏览器相连、remote_sock与目标服务器相连。并且将local_sock与remote_sock注册进EventLoop进行阻塞监视。
Tcprelay类用于处理浏览器的socks5协议的握手、验证以及连接目标服务器并且互相转发数据。
Todo
- 更加灵活地处理错误
- 可以使用
docker更加灵活的部署 - 守护进程模式
- 可以无缝热重启
- 在shell指令上添加可以指定用户名密码的功能
- 可以根据配置文件进行配置指令操作