一、socks5协议

socks5协议是一款广泛使用的代理协议,它在使用TCP/IP协议通讯的前端机器和服务器机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet网中的服务器,或者使通讯更加安全。SOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务器将请求转发给真正的服务器。

代理的工作流程图为:

二、socks5协议交互过程

2.1 基于TCP的客户端连接过程

第一步,客户端向代理服务器发送代理请求,其中包含了代理的版本和认证方式:

                   +----+----------+----------+|VER | NMETHODS | METHODS  |+----+----------+----------+| 1  |    1     | 1 to 255 |+----+----------+----------+

如果是socks5代理,第一个字段VER的值是0x05,表明是socks代理的第5个版本。

第二个字段NMETHODS表示支持的认证方式,第三个字段是一个数组,包含了支持的认证方式列表:

  • 0x00: 不需要认证
  • 0x01: GSSAPI认证
  • 0x02: 用户名和密码方式认证
  • 0x03: IANA认证
  • 0x80-0xfe: 保留的认证方式
  • 0xff: 不支持任何认证方式

服务端收到客户端的代理请求后,选择双方都支持的加密方式回复给客户端:

                         +----+--------+|VER | METHOD |+----+--------+| 1  |   1    |+----+--------+

此时客户端收到服务端的响应请求后,双方握手完成,开始进行协议交互。

数据包分析

客户端开启socks代理,使用浏览器访问网页。抓包软件抓到客户端的认证请求:

服务端的认证响应请求:

2.2 请求

握手完成后,客户端要把需要执行的操作指令发给客户端,表明自己要执行代理的请求。请求帧格式:

        +----+-----+-------+------+----------+----------+|VER | CMD |  RSV  | ATYP | DST.ADDR | DST.PORT |+----+-----+-------+------+----------+----------+| 1  |  1  | X'00' |  1   | Variable |    2     |+----+-----+-------+------+----------+----------+

各字段含义:

  • VER: 代理版本信息
  • CMD: 代理指令
    • 0x01: connect指令,tcp代理时使用。
    • 0x02: bind,很少使用,类似FTP协议中主动连接场景,服务端后服务端会主动连接到客户端。
    • 0x03: udp代理时使用。
  • RSV: 保留字段
  • ATYP: 地址类型
    • 0x01: IPv4地址类型
    • 0x03: unix域socket类型代理
    • 0x04: IPv6地址类型
  • DST.ADDR: 需要连接的目的地址
  • DST.PORT: 需要连接的目的端口

数据包分析

以下是一个去往console.cloud.tencent.com:443的socks5代理请求:

2.3 响应

客户端发完上面的请求连接后,服务端会发起连接到DST.ADDR:DST.PORT,然后返回响应到客户端,响应格式:

        +----+-----+-------+------+----------+----------+|VER | REP |  RSV  | ATYP | BND.ADDR | BND.PORT |+----+-----+-------+------+----------+----------+| 1  |  1  | X'00' |  1   | Variable |    2     |+----+-----+-------+------+----------+----------+

其中VER/RSV/ATYP的含义和上面相同,其他字段的意思:

  • REP: 请求响应

    • 0x00: 成功
    • 0x01-0x08: 失败
    • 0x09-0xff: 未使用
  • BND.ADDR: 连接到的远程地址
  • BND.PORT: 连接到的远程端口

数据包分析

以下是上面代理请求的响应数据包:

2.4 代理通信

当连接建立后,客户端就可以和正常一样访问服务端通信了,此时通信的数据除了目的地址是发往代理程序以外,所有内容都是和普通连接一模一样。对代理程序而言,后面所有收到的来自客户端的数据都会原样转发到服务读端。

例如代理的HTTPS请求连接,实际上发送的数据和普通HTTPS交互过程一模一样:

中间的Socks Protocol栏是wireshark根据连接上下文自动解析出来的,实际上数据包中并没有这一栏。

三、流程图

socks5通信的交互流程:

四、参考

RFC1928 - SOCKS Protocol Version 5
RFC1929 - Username/Password Authentication for SOCKS V5

原文出处:https://www.dyxmq.cn/network/socks5.html

socks5代理工作流程和原理相关推荐

  1. mybatis 原理_Mybatis工作流程及其原理与解析

    Mybatis简介: MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis ...

  2. 什么是MapReduce,MapReduce的工作流程和原理是什么

    一.MapReduce的概念 MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算.概念"Map(映射)"和"Reduce(归约)",和它 ...

  3. 详解DNS工作流程及原理 ( 域名、IP与DNS的关系)

    一.DNS服务概述 DNS是Domain Name System的缩写,即域名系统.其实,DNS是internet的一项服务,一般叫域名服务或者域名解析服务,主要提供网站域名与IP地址的相互转换的服务 ...

  4. Mybatis 的工作流程及原理

    Mybatis 简介: MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数及获取结果集.MyBatis 可 ...

  5. 综述(五)无人驾驶中决策系统的工作流程及原理

    汽车在通过感知系统获取到周围环境的信息后,需要进行最为核心的大脑决策工作,通过采用最优的决策方法,达到安全驾驶汽车的目的.决策结果最终输出给执行模块,实现汽车的加减速.转向.变换车道.超越前车等功能. ...

  6. Mybatis工作流程及其原理与解析

    https://blog.csdn.net/u010890358/article/details/80665753

  7. Strtus2工作流程及原理

    从上图可以看出,一个请求在Struts2 框架中的处理大概分为以下几个步骤: 1.客户端初始化一个指向Servlet 容器(例如Tomcat)的请求: 2.这个请求经过一系列的过滤器(Filter)( ...

  8. 综述(三)无人驾驶中感知系统的工作流程及原理

    人在路上行走时,需要有眼睛.耳朵.鼻子.触觉等器官才能感知周围的状况,从而为自己的大脑做决策提供依据.无人驾驶汽车在路上行驶,更加需要感知周围的环境.而且,由于汽车的车载计算机,在智能程度上还远不及人 ...

  9. Maven的工作流程和原理

    Maven的功能 Maven是一个项目管理的工具,使用maven对java项目进行构建.依赖管理 作用 依赖管理 Maven可以对项目所需要的Jar包进行统一管理,有快速引入Jar包和对Jar包进行统 ...

最新文章

  1. 超越MobileNetV3,谷歌提出MobileDets:移动端目标检测新标杆
  2. 如何玩转PDF?5款简单好用的PDF工具推荐
  3. shell 脚本 自动发送邮件
  4. linux shell脚本 wget,bash – 在shell脚本中运行wget和其他命令
  5. Ubuntu文件上锁了,怎么打开???亲测有效
  6. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: jav
  7. val什么意思vb中的属性值_老司机带你探索Mysql中int(1)、int(10)、int(11)的区别是什么?...
  8. ATL中的C++模板
  9. [原]逆向iOS SDK -- _UIImageAtPath 的实现(SDK 5.1)
  10. 【华为云技术分享】[HDC.Cloud]基于鲲鹏平台的Ceph深度性能调优
  11. 8 一点就消失_农村即将消失的15个“老物件”,件件充满回忆,全认识说明你老了...
  12. pyqtsignal()作用
  13. python open函数用法_python中open函数的用法详解
  14. ARCGIS拓扑检查步骤
  15. python实现图像的理想滤波器、butterworth滤波器、指数滤波器
  16. 学习笔记3--车载传感器之毫米波雷达和超声波雷达
  17. 怎么开发qq群自动回复机器人呢?我教你
  18. 空间分辨率和灰度分辨率
  19. 458、Java框架112 -【MyBatis - 一级缓存、二级缓存】 2020.12.28
  20. slf4j的包使用说明

热门文章

  1. Thinkphp 使用Workerman 聊天室
  2. 网页前端设计-作业二(CSS)
  3. RT-Thread实时操作系统简介
  4. 金蝶服务器维护记录,金蝶EAS参考指南-系统管理和维护.doc
  5. 自定义控件三部曲之绘图篇(十九)——LinearGradient与闪动文字效果
  6. c语言版算法题“喝汽水”(或汽水可乐)
  7. vue项目使用高德地图定位当前地址
  8. IE浏览器请求ulr中有中文会报错
  9. 浅析 Linux 中的时间编程和实现原理
  10. Coarse2Fine: Fine-grained Text Classification on Coarsely-grained Annotated Data