美文网首页
Socks5协议简介

Socks5协议简介

作者: 小风吹的我乱了 | 来源:发表于2020-10-30 00:44 被阅读0次

socks5是一个代理协议,主要的作用就是代理客户端来访问远程服务器,起到一个中介作用。

一般情况下当代理客户端因为防火墙等原因访问不了远程服务器,而另一个服务器即可以访问远程服务器又可以被客户端访问到时,可以在这个服务器上部署socks5服务端,本地部署socks5客户端,让这个中介服务器来代理访问远程服务器。

下面介绍协议流程,可以简单分为握手阶段,准备阶段和代理阶段

握手阶段

客户端建立和代理服的tcp连接A,并发送第一帧数据:

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

VER:协议版本号,socks5情况下为0x05

代理服务器收到后,会鉴别VER,回应

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

METHOD:身份验证方法,不需要身份验证时为0x00,此时直接进入”准备阶段“(不为0x00时,需要走身份验证流程,参见socks5身份验证

准备阶段

客户端发送第二帧数据:

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

CMD:命令,tcp代理0x01,udp代理0x03
RSV:保留字段
ATYP:地址类型 0x01:ipv4,0x03:域名,0x04:ipv6
DST.ADDR:目标地址
DST.PORT:目标端口
比如数据 :0x05|0x01|0x00|0x03|0x0d7777772e62616964752e636f6d|0x01bb
代表需要代理的是tcp连接,目标地址类型是域名,真实解析出来目标地址就是"www.baidu.com:443",即告诉代理服,帮我和"www.baidu.com:443"作代理吧

代理服收到后,就直接建立和DST.ADDR的tcp连接B,回复

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

REP:状态位,0x00代表连接DST.ADDR成功了
RSV:保留字段
ATYP:地址类型 0x01:ipv4,0x03:域名,0x04:ipv6
BND.ADDR:绑定地址,连接B的本地地址
BND.PORT:绑定端口,连接B的本地端口
比如,返回0x05|0x00|0x00|0x01|0xc0a8c76a|0xcdf0,代表准备代理成功了,进入下一步吧

代理阶段

客户端把发给目标服的数据由连接A发给代理服,代理服将这些数据转由连接B发给目标服,同时代理服收到的目标服数据转由连接A返回给客户端


总结

以上是整个socks5代理的tcp代理流程的简单流程,udp代理会复杂些,后面会单独写一篇,
想详细了解的可以参照我的golang实现https://github.com/0990/socks5

引用

RFC1928-SOCKS Protocol Version 5

相关文章

  • Socks5协议简介

    socks5是一个代理协议,主要的作用就是代理客户端来访问远程服务器,起到一个中介作用。 一般情况下当代理客户端因...

  • shadowsocks源码分析之TCP协议

    shadowsocks项目是基于socks5协议实现的,因此本文先简单说说socks5协议,然后再结合shadow...

  • netty系列之:netty对SOCKS协议的支持

    [toc] 简介 SOCKS是一个优秀的网络协议,主要被用来做代理,它的两个主要版本是SOCKS4和SOCKS5,...

  • polipo代理协议转换

    0 常用ss开代理,但由于ss是socks5协议的,偶尔会有些问题,polipo可以将socks5转换成http ...

  • Mac Socks5转Privoxy协议

    此文演示如何在Mac系统中安装Privoxy软件,并将socks5协议转成http协议。 使用 安装privoxy...

  • ss官方协议

    协议 ss是一个基于SOCKS5的安全拆分代理 ss本地组件(ss-local)就像传统的SOCKS5服务器,为客...

  • socks4和socks5的区别

    SOCKS代理又分为SOCKS4和SOCKS5 二者不同的是SOCKS4代理只支持TCP协议(即传输控制协议),而...

  • socks5协议理解(TCP/UDP)

    Edit socks5协议理解(TCP/UDP) 1.socks 5 TCP认证 1.1 客户端建立连接并发送认证...

  • Polipo全局代理设置方法

    Shadowsocks是我们常用的代理工具,它使用socks5协议,而终端很多工具目前只支持http和https等...

  • Mac iterm2终端设置shadowsocks代理

    shadowsocks是我们常用的代理工具,它使用socks5协议,而终端很多工具目前只支持http和https等...

网友评论

      本文标题:Socks5协议简介

      本文链接:https://www.haomeiwen.com/subject/avkrvktx.html