一、socks协议定义

  1. SOCKS is an Internet protocol that exchanges network packets between a client and server through a proxy server.
  2. socks是一种互联网协议,它通过一个代理服务器在客户端和服务端之间交换网络数据。简单来说,它就是一种代理协议,扮演一个中间人的角色,在客户端和目标主机之间转发数据.

  1. socks协议位于OSI模型中的第五层,即会话层(Session Layer)

二、socks协议作用

  1. 一提到代理,肯定会想到翻墙,而socks5作为一种代理协议,肯定也能用来翻墙嘛。不过遗憾的是,虽然它是代理协议,然而并不能用于翻墙。因为它的数据都是明文传输,会被墙轻易阻断.
  2. 互联网早期,企业内部网络为了保证安全性,都是置于防火墙之后,这样带来的副作用就是访问内部资源会变得很麻烦,socks协议就是为了解决这个问题.
  3. socks相当于在防火墙撕了一道口子,让合法的用户可以通过这个口子连接到内部。

三、socks5协议定义

  1. socks5就是socks协议的第五个版本,作为socks4的一个延伸,在socks4的基础上新增UDP转发认证功能

四、 socks协议流程

  1. 首先分析下浏览器的请求过程

  2. 1. 建立TCP连接
    浏览器向百度所在服务器建立TCP连接,经过3次握手后成功双方建立一条连接,用于数据传输
    2. 发起Http请求
    TCP连接建立成功后,浏览器通过建立的连接发送HTTP请求
    GET /
    Host www.baidu.com
    3. 服务器响应浏览器一段HTML内容,浏览器收到后对页面进行渲染
    
  3. 如果给浏览器设置socks5协议代理,端口1080,流程如下

  4. 1. 浏览器和socks5代理建立TCP连接
    和上面不同的时,浏览器和服务器之间多了一个中间人,即socks5,因此浏览器需要跟socks5服务器建立一条连接。2. socks5协商阶段
    在浏览器正式向socks5服务器发起请求之前,双方需要协商,包括协议版本,支持的认证方式等,双方需要协商成功才能进行下一步。3. socks5请求阶段
    协商成功后,浏览器向socks5代理发起一个请求。请求的内容包括,它要访问的服务器域名或ip,端口等信息4.socks5 relay阶段
    scoks5收到浏览器请求后,解析请求内容,然后向目标服务器建立TCP连接。5.数据传输阶段
    以上步骤,我们成功建立了浏览器 –> socks5,socks5–>目标服务器之间的连接。这个阶段浏览器开始把数据传输给scoks5代理,socks5代理把数据转发到目标服务器。
    

五、协议细节

  1. 我们把请求过程总结为3个阶段,分别为:握手阶段、请求阶段,Relay阶段

  2. 1. 握手阶段
    握手阶段包含协商和子协商阶段,我们把它拆分为两个分别讨论2. 协商阶段
    在这个阶段,客户端向socks5发起请求,内容如下:
    +----+----------+----------+
    |VER | NMETHODS | METHODS  |
    +----+----------+----------+
    | 1  |    1     | 1 to 255 |
    +----+----------+----------+#上方的数字表示字节数,下面的表格同理,不再赘述
    VER: 协议版本,socks5为0x05
    NMETHODS: 支持认证的方法数量
    METHODS: 对应NMETHODS,NMETHODS的值为多少,METHODS就有多少个字节。RFC预定义了一些值的含义,内容如下:
    X’00’ NO AUTHENTICATION REQUIRED
    X’01’ GSSAPI
    X’02’ USERNAME/PASSWORD
    X’03’ to X’7F’ IANA ASSIGNED
    X’80’ to X’FE’ RESERVED FOR PRIVATE METHODS
    X’FF’ NO ACCEPTABLE METHODSsocks5服务器需要选中一个METHOD返回给客户端,格式如下:
    +----+--------+
    |VER | METHOD |
    +----+--------+
    | 1  |   1    |
    +----+--------+
    当客户端收到0x00时,会跳过认证阶段直接进入请求阶段; 当收到0xFF时,直接断开连接。其他的值进入到对应的认证阶段。3. 认证阶段
    认证阶段作为协商的一个子流程,它不是必须的。socks5服务器可以决定是否需要认证,如果不需要认证,那么认证阶段会被直接略过。
    如果需要认证,客户端向socks5服务器发起一个认证请求,这里以0x02的认证方式举例:+----+------+----------+------+----------+
    |VER | ULEN |  UNAME   | PLEN |  PASSWD  |
    +----+------+----------+------+----------+
    | 1  |  1   | 1 to 255 |  1   | 1 to 255 |
    +----+------+----------+------+----------+
    VER: 版本,通常为0x01
    ULEN: 用户名长度
    UNAME: 对应用户名的字节数据
    PLEN: 密码长度
    PASSWD: 密码对应的数据socks5服务器收到客户端的认证请求后,解析内容,验证信息是否合法,然后给客户端响应结果。响应格式如下:
    +----+--------+
    |VER | STATUS |
    +----+--------+
    | 1  |   1    |
    +----+--------+
    STATUS字段如果为0x00表示认证成功,其他的值为认证失败。当客户端收到认证失败的响应后,它将会断开连接。3. 请求阶段
    顺利通过协商阶段后,客户端向socks5服务器发起请求细节,格式如下:+----+-----+-------+------+----------+----------+
    |VER | CMD |  RSV  | ATYP | DST.ADDR | DST.PORT |
    +----+-----+-------+------+----------+----------+
    | 1  |  1  | X'00' |  1   | Variable |    2     |
    +----+-----+-------+------+----------+----------+
    VER 版本号,socks5的值为0x05
    CMD
    0x01表示CONNECT请求
    0x02表示BIND请求
    0x03表示UDP转发
    RSV 保留字段,值为0x00
    ATYP 目标地址类型,DST.ADDR的数据对应这个字段的类型。
    0x01表示IPv4地址,DST.ADDR为4个字节
    0x03表示域名,DST.ADDR是一个可变长度的域名
    0x04表示IPv6地址,DST.ADDR为16个字节长度
    DST.ADDR 一个可变长度的值
    DST.PORT 目标端口,固定2个字节
    上面的值中,DST.ADDR是一个变长的数据,它的数据长度根据ATYP的类型决定。我们可以通过掐头去尾解析出这部分数据。
    ocks5服务器收到客户端的请求后,需要返回一个响应,结构如下+----+-----+-------+------+----------+----------+
    |VER | REP |  RSV  | ATYP | BND.ADDR | BND.PORT |
    +----+-----+-------+------+----------+----------+
    | 1  |  1  | X'00' |  1   | Variable |    2     |
    +----+-----+-------+------+----------+----------+
    VER socks版本,这里为0x05
    REP Relay field,内容取值如下
    X’00’ succeeded
    X’01’ general SOCKS server failure
    X’02’ connection not allowed by ruleset
    X’03’ Network unreachable
    X’04’ Host unreachable
    X’05’ Connection refused
    X’06’ TTL expired
    X’07’ Command not supported
    X’08’ Address type not supported
    X’09’ to X’FF’ unassigned
    RSV 保留字段
    ATYPE 同请求的ATYPE
    BND.ADDR 服务绑定的地址
    BND.PORT 服务绑定的端口DST.PORT
    针对响应的结构中,BND.ADDR和BND.PORT值得特别关注一下,可能有朋友在这里会产生困惑,返回的地址和端口是用来做什么的呢?4. Relay阶段
    socks5服务器收到请求后,解析内容。如果是UDP请求,服务器直接转发; 如果是TCP请求,服务器向目标服务器建立TCP连接,后续负责把客户端的所有数据转发到目标服务。

socks5协议详细说明相关推荐

  1. Socks5协议中文文档(RFC1928)

    转自:http://blog.chinaunix.net/uid-26548237-id-3434356.html(侵删) RFC1928文档 最近,需要用到socks5协议,实现与代理相关的功能,所 ...

  2. C# Socket使用代理 及 Http协议、Socks5协议

    Http协议:  http://www.w3.org/Protocols/rfc2068/rfc2068 socks5 协议: http://www.faqs.org/rfcs/rfc1928.htm ...

  3. socks5协议RFC文档

    socks5协议RFC文档 « Xiaoxia[PG] socks5协议RFC文档 Network Working Group M. Leech Request for Comments: 1928 ...

  4. 【转】运输层TCP协议详细介绍

    [转]运输层TCP协议详细介绍 TCP是TCP/IP协议族中非常复杂的一个协议.它具有以下特点: 1:面向连接的运输层协议.在使用TCP协议之前,首先需要建立TCP连接.传送数据完毕后,必须释放已经建 ...

  5. 一起来用Websocket(二):Websocket协议详细分析

    一起来用Websocket(二):Websocket协议详细分析 前言 本节主要翻译一下websocket的协议.其中,socket通信开发,最重要的就是协议了.通信软件(QQ.MSN).杀毒软件(3 ...

  6. RDP协议详细解析(一)

    RDP协议详细解析   一 前言 二 概述 三 同络层次 四 各连接模块说明 五 各功能模块说明 六 rdpwin结构.数据流说明 七 总结 一.前言 windows从NT开始提供终端服务,它是微软买 ...

  7. 协议:Modbus通讯协议详细

    1.Modbus通讯协议详细解释 https://blog.csdn.net/rxiang12/article/details/79125813 2.Modbus通信协议详解 https://blog ...

  8. TFTP协议详细分析

    TFTP协议详细分析 1. 目的 TFTP是一个传输文件的简单协议,它其于UDP协议而实现,但是我们也不能确定有些TFTP协议是基于其它传输协议完成的.此协议设计的时候是进行小文件传输的.因此它不具备 ...

  9. Regeorg 从python2改造为python3-从实战中学习socks5协议

    Regeorg 从python2改造为python3-从实战中学习socks5协议 问题描述 解决过程 环境准备 过程 这两天没啥工作,一般这时候我都不会发挥自己的主观能动性去主动找活,于是乎只能上网 ...

  10. 最全流媒体协议详细总结介绍(RTP/RTCP/RTSP/RTMP/MMS/HLS/HTTP/ HTTP-FLV(HDL) /SDP)

    RTP:实时传输协议(Real-time Transport Protocol)          RTP是一种基于包的传输协议,它用来传输实时数据.在网络上传输数据包的延迟和误差是不可避免的,对此R ...

最新文章

  1. 【线段树】【FeyatCup】——2.法法塔的奖励
  2. opencv简单滤波
  3. Matplotlib实例教程(十四)误差条形图
  4. tf.unstack\tf.unstack
  5. 【学习笔记】Python - tkinter
  6. mysql 主键 最佳实践_Spring Data Jpa + MySQL IDENTITY 主键下批量插入最佳实践
  7. java企业人事管理系统源码_企业人事管理系统完美版源代码 - 源码下载|行业应用软件|企业管理(财务/ERP/EIP等)|源代码 - 源码中国...
  8. leetcode-reverse words in a string
  9. mysql blob图片_显示存储在mysql blob中的图像
  10. 关于CVE-2020-14882,你需要知道的都在这里
  11. 2018SDIBT_国庆个人第七场
  12. 阿里云云计算6 ECS的概念
  13. 软件测试项目案例.pdf,【精选】最经典软件测试案例.pdf
  14. ShockwaveFlash控件详解
  15. 图片倒影控件ReflectionImage
  16. Android 10 SystemUI 如何添加4G信号和WiFi图标
  17. 科学家即将揭示人类大脑神经网络结构的奥秘
  18. pandas 如何删掉第一行_pandas删除指定行详解
  19. 抖音播放量为什么那么少?如何提升抖音账号权重?
  20. goip设备的特点_架设通讯网络设备为境外诈骗集团服务 3男子被田东警方抓获...

热门文章

  1. Google 电子表格函数列表
  2. 浏览器iframe跨域
  3. 程序员 开发人员 在线工具箱
  4. python自动排版公众号_GitHub - qfwc258/maxpress: MaxPress:MarkDown+Python实现微信公众号一键排版...
  5. css扫描动画效果demo示例(整理)
  6. SIP信令中的PRACK的含义和使用
  7. 关于汉王 唐人笔手写板 打开后间歇性手写程序闪退以及屏幕锁屏或者关闭后手写板自动usb拔出问题
  8. vs2015离线安装QT的vsix工具
  9. MeteoInfoLab脚本示例:数据投影-FLEXPART
  10. C语言读取松下PLC数据,松下PLC数据表在程序中的使用