2025年socks协议详解

socks协议详解0x01 socks 协议简介 Socks Socket Secure 协议是一种网络协议 处于会话层 用于管理网络连接并提供安全性和隐私保护 通过使用 Socks 代理服务器 客户端可以隐藏其真实 IP 地址和其他身份信息 从而匿名地访问互联网上的资源 0x02 socks 协议连接过程

大家好,我是讯享网,很高兴认识大家。

0x01 socks协议简介

Socks(Socket Secure)协议是一种网络协议,处于会话层,用于管理网络连接并提供安全性和隐私保护。通过使用Socks代理服务器,客户端可以隐藏其真实IP地址和其他身份信息,从而匿名地访问互联网上的资源。

0x02 socks协议连接过程

socks建立连接的过程可以简单的分成四个步骤:

  1. 客户端向socks服务器发起请求,告诉服务器自己支持的认证方法。
  2. socks服务器选择一种支持的认证方式并告诉客户端,如果没有支持的则中断连接。
  3. 客户端发送请求,告诉socks服务器需要访问的目标服务器的IP和端口。
  4. socks服务器响应请求,告诉客户端连接状态码以及自己与目标服务器通信的IP和端口,此时建立连接完毕。

下面详细介绍一下socks连接的过程:

在这里插入图片描述
讯享网

  1. socks客户端和服务端通过TCP三次握手建立连接。
  2. socks客户端向服务端发起协商请求,数据包格式如下:
VER NMETHODS METHODS
1 1 1to255
  • VER(1字节):协议版本,socks5为0x05
  • NMETHODS(1字节):支持认证方法的数量。
  • METHODS(可变长度,NMETHODS字节):
    • X’00’ 不用认证
    • X’01’ GSSAPI认证
    • X’02’ 账号密码认证
    • X’03’ to X’7F’ IANA分配
    • X’80’ to X’FE’ 私有方法保留
    • X’FF’ 无支持的认证方法
  1. socks5服务器选中一个METHOD返回给客户端,数据包格式如下:
VER METHOD
1 1
  • VER(1字节):协议版本,socks5为0x05
  • NMETHOD(1字节):选中的方法。

当客户端收到0x00时,会跳过认证阶段直接进入请求阶段,当收到0xFF时,直接断开连接,收到0x02则进入认证阶段,也叫子协商。

  1. 客户端发起认证请求,这里以0x02为例,数据包如下:
VER ULEN UNAME PLEN PASSWD
1 1 1to255 1 1to255
  • VER(1字节): 版本号
  • ULEN(1字节): 用户名长度
  • UNAME(ULEN字节): 对应用户名的字节数据
  • PLEN(1字节): 密码长度
  • PASSWD(PLEN字节): 密码对应的数据
  1. socks服务器收到认证请求后判断账号密码是否正确,并返回响应结果,数据包格式如下:
VER STATUS
1 1

VER(1字节):版本号

STATUS(1字节):状态码

状态码为0x00表示认证成功,否则认证失败。认证失败的响应后将会断开连接。

  1. 协商完毕后客户端向socks服务器发起请求,数据包格式如下:
VER CMD RSV ATYP DST.ADDR DST.PORT
1 1 X’00’ 1 Variable 2
  • VER(1字节): 版本号,socks5的值为0x05
  • CMD(1字节):连接方式
    • 0x01表示CONNECT请求
    • 0x02表示BIND请求
    • 0x03表示UDP转发
  • RSV(1字节):保留字段,值为0x00
  • ATYP(1字节):目标主机地址类型
    • 0x01表示IPv4地址,DST.ADDR为4个字节
    • 0x03表示域名,DST.ADDR第一个字节表示域名长度,后面的数据表示域名。(没写错,就是没有0x02
    • 0x04表示IPv6地址,DST.ADDR为16个字节长度
  • DST.ADDR(可变长度):表示主机地址
  • DST.PORT(2字节):表示目标主机端口
  1. CMD=0x01:TCP连接模式,socks服务器向目标服务器发起TCP三次握手,连接成功后向客户端发送确认数据包。
  2. CMD=0x02:BIND定模式,这种模式一般是双向监听,也就是说客户端也要开启一个端口监听来自目标服务器的数据。socks服务器开启监听端口并通过请求响应数据包告诉客户端,客户端把数据包中的地址和端口写在应用层协议的数据包里,当目标主机从数据包中取出IP和端口(socks服务器的IP和端口)就会向这个IP和端口发送数据。
  3. CMD=0x03:UPD模式,直接转发。
  1. 当socks服务器收到请求后,判断连接类型(CMD字段)后与目标服务器建立连接(TCP或BIND)或直接转发(UDP),然后向客户端返回一个响应,响应数据包格式如下:
VER REP RSV ATYP BND.ADDR BND.PORT
1 1 X’00’ 1 Variable 2
  • VER(1字节):socks版本号,socks为0x05
  • REP(1字节):返回状态码:
    • X’00’ 成功
    • X’01’ 代理服务器出错
    • X’02’ 连接不允许
    • X’03’ 网络不可达
    • X’04’ 主机不可达
    • X’05’ 连接被拒绝
    • X’06’ TTL 到期
    • X’07’ 命令 (CMD) 不支持
    • X’08’ 地址类型不支持
    • X’09’ to X’FF’ 目前没有分配
  • RSV(1字节):保留字段
  • ATYPE(1字节): 与请求的ATYPE相同
  • BND.ADDR(可变长度):服务器绑定的地址
  • BND.PORT(2字节):服务器绑定的端口DST.PORT
  • BND.ADDR和BND.PORT分别代表socks接收目标服务器数据的地址和端口。
  • BIND模式下socks服务器的响应包有两个,第一个数据包是在socks服务器建立并绑定后发送,此时socks服务器仅创建了套接字,还未与目标主机建立连接。第二个数据包是在目标主机到socks服务器连接建立完成后。
    • 第一个数据包:发送socks绑定的地址和端口。
    • 第二个数据包:发送目标服务器的地址和端口,目标服务器提供服务的IP和端口可能和请求时的IP和端口不同。
  1. 客户端收到服务器的响应后进入转发阶段。此时开始向socks服务器发送数据包,服务器收到数据包后转发到目标服务器上,收到目标服务器的数据也会转发到客户端。

总结

这篇文章介绍了Socks协议的基本概念和连接过程。Socks协议是一种网络协议,位于会话层,用于管理网络连接并提供安全性和隐私保护。文章详细介绍了Socks客户端和服务器之间建立连接的步骤。此外,文章还介绍了Socks协议中常用的数据包格式和状态码,以及Socks协议的应用场景和优势。

参考文章

  1. 理解socks5协议的工作过程和协议细节
  2. # Socks 5 协议解析
  3. Username/Password Authentication for SOCKS V5
小讯
上一篇 2025-03-30 21:41
下一篇 2025-01-27 11:25

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/12565.html