Python实现的极简的socks5服务端

Author Avatar
WoodyXiong 6月 20, 2018
  • 在其它设备中阅读本文章

TinySocks5项目地址

项目介绍

本项目是基于socks5协议的代理服务端,突破本地的网络限制。本项目只支持纯生的socks5协议,传递的信息都为明文传递,无任何加密。如果轻量级使用仅需在浏览器端安装SwitchyOmega等可以配置socks5连接的插件即可快速配置进行代理。如果为代理重度使用者请移步shadowsocksshadowsocksr

使用说明

服务端安装环境

Python3.6及以上(windows端和ubuntu端可完美运行),跑的是本项目的Python脚本。

git clone https://github.com/woodyxiong/TinySocks5.git
python main.py -p [port]

客户端安装配置

首先安装SwitchyOmega插件

Chrome/Firefox安装操作

国产浏览器操作如下(以qq浏览器为例)

打开应用中心并下载SwitchyOmega

点击应用中心按钮并进入应用中心

qq浏览器截图

从应用中心安装SwitchyOmega

安装switchyomega

配置代理

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

新建代理

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

配置代理

进阶操作:配置自动模式

设置符合规则的进入socks5代理服务器,若没有进入规则则选择直接连接即可

规则列表网址为gfwlist项目

https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt

自动模式

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

大功告成

完成配置

原理介绍

结构示意图如下

Tinysocks5结构示意图

文件简介

  • main.py 主函数入口文件
  • shell.py 分析以及输出shell指令
  • eventloop.py 程序的主循环
  • controller.py 程序控制器
  • tcprelay.py 内容分发类

原理分析

首先进入main.py,从这里分发到shell.py来解析端口、用户名、密码等配置信息。

再继续生成ControllerEventLoop类,Controllersocks5服务器端,用于监控浏览器发送的socks5请求,并且将监控的可读事件注册到EventLoop类对其进行监控。

EventLoop一直循环监控可读事件、可写事件、错误事件。

如果有浏览器客户端与Controller相连,则生成Tcprelay类,此类有local_sock用于与浏览器相连、remote_sock与目标服务器相连。并且将local_sockremote_sock注册进EventLoop进行阻塞监视。

Tcprelay类用于处理浏览器的socks5协议的握手、验证以及连接目标服务器并且互相转发数据。

Todo

  • 更加灵活地处理错误
  • 可以使用docker更加灵活的部署
  • 守护进程模式
  • 可以无缝热重启
  • 在shell指令上添加可以指定用户名密码的功能
  • 可以根据配置文件进行配置指令操作