socks v5是一种用于代理的协议,就是说client用这种协议与server沟通,让server帮忙代访问remote后再将结果通过此协议返给client,所以一般是涉及到3个端,分别是client客户端、server代理端、remote请求目的地。通常因为client无法直接访问remote,有可能是由于防火墙限制,所以需要经过一个中间的server代理来访问remote。著名的shawsocks(client)简称ss就是基于这种协议的,工作于传输层之上,传输层可基于TCP或UDP。原理是这样的,ss和浏览器(可以是其他软件)运行在同一PC上,暂合称为client端,浏览器发出的数据全部转发给ss,然后由ss转发给server,server再进行转发,所以表现出来是这样的:browser ==> shawdowsocks ==> server ==> remote,数据返回时按原路返回。需要注意的是,server不会对应用层协议进行拆分,而是只进行转发,所以remote收到的数据中仍包含client端的地址、浏览器信息等等。

本文所列的表格通常长这样的:

┌────────┬────────┬────────┐
│ field1 │ field2 │ field3 │
├────────┼────────┼────────┤
│      1 │      2 │      3 │
└────────┴────────┴────────┘

其中field就是协议头的域。其下面的数字表示该域所占字节数量,而不是其表示内容;如果是"variable",表示可变的,一般在其前面会有个域能指定其长度;如果是0x00这样的十六进制则表示该域内容固定为0x00;。

协议内容 (基于TCP)

  • Step 1:client to server
┌─────┬──────────┬─────────┐
│ VER │ NMETHODS │ METHODS │
├─────┼──────────┼─────────┤
│   1 │        1 │ 1~255   │
└─────┴──────────┴─────────┘

用途:确立连接认证方法协商,client告知server其所支持的认证方法,server可从中挑选一个。其中
ver socks协议的版本号,常用的是socks5版本的,故可以为0x05
nmethods 后面的域methods有n个字节
methods 每个字节即为一个认证方法,供server挑选

  • Step 2:server to client
┌──────┬──────────┐
│ VER  │  METHOD  │
├──────┼──────────┤
│  1   │    1     │
└──────┴──────────┘

用途:告知client需要使用哪种认证方法进行认证。
ver 版本,即0x05
method 认证方法,从Step 1中的METHODS中选一个。

  • Step 3:client to server
┌──────┬──────┬────────┬───────┬───────────┬──────────┐
│ VER  │ CMD  │  RSV   │ ATYP  │ DST.ADDR  │ DST.PROT │
├──────┼──────┼────────┼───────┼───────────┼──────────┤
│   1  │   1  │ 0x00   │    1  │ Variable  │        2 │
└──────┴──────┴────────┴───────┴───────────┴──────────┘

用途:告知server要连接的remote相关信息。
ver 版本,即0x05
cmd 命令,可以是 1)0x01CONNECT 2) 0x02BIND 3) 0x03UDP ASSOCIATE
rsv 保留,就是暂时没用的
atyp 指定紧跟的域的地址类型,可以是 1) 0x01 IPv4 2) 0x03 DOMAINNAME 3) 0x04 IPv6
dst.addr 地址
dst.prot 端口号
注:如果atyp是domainname,那么长度(以字节为单位)得写在dst.addr的首个字节里边,否则无法知道域名长度;如果是ipv4就4字节,如果是ipv6就16字节。 cmd的3个命令在最下面讲。

  • Step 4:server to client
┌──────┬──────┬────────┬───────┬───────────┬──────────┐
│ VER  │ REP  │  RSV   │ ATYP  │ BND.ADDR  │ BND.PORT │
├──────┼──────┼────────┼───────┼───────────┼──────────┤
│   1  │   1  │ 0x00   │    1  │ Variable  │        2 │
└──────┴──────┴────────┴───────┴───────────┴──────────┘

用途:回复client。
ver 版本,即0x05
rep 回复,可以是下面的一项:
o 0x00 succeeded
o 0x01 general SOCKS server failure
o 0x02 connection not allowed by ruleset
o 0x03 Network unreachable
o 0x04 Host unreachable
o 0x05 Connection refused
o 0x06 TTL expired
o 0x07 Command not supported
o 0x08 Address type not supported
o 0x09 to 0xFF unassigned
rsv 保留。
atyp 跟上面讲过的一样,包括接下来的两个域。

协议内容 (基于UDP)

  • client to server
┌──────┬───────┬───────┬───────────┬───────────┬──────────┐
│ RSV  │ FRAG  │ ATYP  │ DST.ADDR  │ DST.PORT  │   DATA   │
├──────┼───────┼───────┼───────────┼───────────┼──────────┤
│   2  │    1  │    1  │ Variable  │        2  │ Variable │
└──────┴───────┴───────┴───────────┴───────────┴──────────┘

rsv 保留。
frag 当前数据包的fragment号,这是传输层的分片,要自己实现的,而不是网络层的分片。但可以选择不实现分片,直接把frag非零的数据报丢掉。
ATYP 跟上面讲过的一样,包括接下来的两个域。
data 数据。

细节详解

关于Step 1中的METHODS字段有如下可选:
o 0x00 NO AUTHENTICATION REQUIRED(常用)
o 0x01 GSSAPI
o 0x02 USERNAME/PASSWORD(常用)
o 0x03 to 0x7F IANA ASSIGNED
o 0x80 to 0xFE RESERVED FOR PRIVATE METHODS
o 0xFF NO ACCEPTABLE METHODS (常用)
注:0x01必须支持,0x02应该要支持。注意了,认证方法是其他独立的协议,比如USERNAME/PASSWORD,这与本协议无关。


关于cmd中的3个选项:

  • CONNECT
    In the reply to a CONNECT, BND.PORT contains the port number that the server assigned to connect to the target host, while BND.ADDR contains the associated IP address. The supplied BND.ADDR is often different from the IP address that the client uses to reach the SOCKS server, since such servers are often multi-homed. It is expected that the SOCKS server will use DST.ADDR and DST.PORT, and the client-side source address and port in evaluating the CONNECT request.
  • BIND
    The BIND request is used in protocols which require the client to accept connections from the server. FTP is a well-known example, which uses the primary client-to-server connection for commands and status reports, but may use a server-to-client connection for transferring data on demand (e.g. LS, GET, PUT).
    It is expected that the client side of an application protocol will use the BIND request only to establish secondary connections after a primary connection is established using CONNECT. In is expected that a SOCKS server will use DST.ADDR and DST.PORT in evaluating the BIND request.
    Two replies are sent from the SOCKS server to the client during a BIND operation. The first is sent after the server creates and binds a new socket. The BND.PORT field contains the port number that the SOCKS server assigned to listen for an incoming connection. The BND.ADDR field contains the associated IP address. The client will typically use these pieces of information to notify (via the rimary or control connection) the application server of the rendezvous address. The second reply occurs only after the anticipated incoming connection succeeds or fails.
  • UDP ASSOCIATE
    The UDP ASSOCIATE request is used to establish an association within the UDP relay process to handle UDP datagrams. The DST.ADDR and DST.PORT fields contain the address and port that the client expects to use to send UDP datagrams on for the association. The server MAY use this information to limit access to the association. If the client is not in possesion of the information at the time of the UDP ASSOCIATE, the client MUST use a port number and address of all zeros.
    A UDP association terminates when the TCP connection that the UDP ASSOCIATE request arrived on terminates.
    In the reply to a UDP ASSOCIATE request, the BND.PORT and BND.ADDR fields indicate the port number/address where the client MUST send UDP request messages to be relayed.

其他

  • RFC 1928翻译
  • RFC 1928

转载于:https://www.cnblogs.com/xcw0754/p/8414038.html

socks v5 协议解析相关推荐

  1. Linux搭建Socks v5正向代理服务器

    很多中小企业为了隔离办公环境与因特网环境,使用Socks5或者HTTP代理的方式.HTTP代理的方式选择很多,常见的正向代理服务器有squid,privoxy,nginx,windows端有CCPro ...

  2. 调试备忘录-SWD协议解析

    目录--点击可快速直达 目录 写在前面 1  SWD协议简介 2  SWD物理层协议解析 2.1  SWD通信时序分析 2.2  SWD 寄存器简介 2.2.1  DP寄存器 2.2.2  AP寄存器 ...

  3. synopsys PCIE IP协议解析

    synopsys PCIE IP协议解析 1.Overview Core支持单个Pcie内核的Loopback功能,该功能主要为了做芯片验证,以及在没有远程接收器件的情况下完成自己的回环.同时,Cor ...

  4. 详解BLE 空中包格式—兼BLE Link layer协议解析

    BLE有几种空中包格式?常见的PDU命令有哪些?PDU和MTU的区别是什么?DLE又是什么?BLE怎么实现重传的?BLE ACK机制原理是什么?希望这篇文章能帮你回答以上问题. 虽然BLE空中包(pa ...

  5. wireshark协议解析器 源码分析 封装调用

    源码分析 Wireshark启动时,所有解析器进行初始化和注册.要注册的信息包括协议名称.各个字段的信息.过滤用的关键字.要关联的下层协议与端口(handoff)等.在解析过程,每个解析器负责解析自己 ...

  6. wireshark协议解析器原理与插件编写

    工作原理 每个解析器解码自己的协议部分, 然后把封装协议的解码传递给后续协议. 因此它可能总是从一个Frame解析器开始, Frame解析器解析捕获文件自己的数据包细节(如:时间戳), 将数据交给一个 ...

  7. SGS 0.9.7 协议解析

    SGS as客户端发送数据规则: sgs 是0.9.7版 协议规则:  包头3个字节: 包大小(2个字节),命令(1个字节)  数据包  注意:包大小=命令+ 数据包 的大小 登陆命令:   命令是: ...

  8. 简易HTTP协议解析

    首先介绍一些必要的知识点. TCP协议为操作系统底层协议,能够保证应用层获取到完整的.顺序一直的包序列.但TCP不提供具体的分包,需要上层协议自己解决.TCP发送给上层协议的数据是一个没有意义的字符串 ...

  9. 视音频数据处理入门:UDP-RTP协议解析

    ===================================================== 视音频数据处理入门系列文章: 视音频数据处理入门:RGB.YUV像素数据处理 视音频数据处理 ...

  10. 公网传输技术之SRT协议解析(上)

     点击上方"LiveVideoStack"关注我们 作者:张博力 编辑:Alex ▼扫描下图二维码或点击阅读原文▼ 了解音视频技术大会更多信息 " 摘  要:SRT协议( ...

最新文章

  1. 【bzoj2460】[BeiJing2011]元素 贪心+高斯消元求线性基
  2. #,#x,\u开头的unicode介绍
  3. 导致大量kworker的原因_高尿酸与生活习惯有关?导致高尿酸的8个坏习惯,现在改还来得及...
  4. 老男孩shell实战读书笔记 (6-10章节)
  5. 一个漂亮而强大的自定义view
  6. php函数默认参数放在哪测,php函数默认参数的实例代码
  7. 【Database】人脸数据库介绍及下载链接
  8. 《Unix编程艺术》读书笔记(1)
  9. android 的android httpClient详解
  10. Educoder计算机数据表示实验(HUST)第2关:汉字机内码获取实验
  11. 总结卡方检验(Chi-square test)和费舍尔精确检验(Fisher exact test)的区别
  12. 我的2016——程序员年到三十,工作第四年
  13. 交换机/路由器实验:最后说些什么
  14. 【总览】程序员前端、后端资源合集
  15. 【NeurIPS100】谷歌、Facebook、斯坦福等十篇机器学习最新论文解读
  16. 高精度算法——高精度减法
  17. 微信小程序 SKU设计与实现 前端 数据结构分析
  18. 解决Python3.7根目录中没有Scripts文件夹
  19. 计算机毕业设计asp.net党员信息管理系统(源码+系统+mysql数据库+Lw文档)
  20. 四川传媒学院加入ACA世界大赛!发展博学笃行,德艺双馨人才

热门文章

  1. 小学生C++趣味编程教材
  2. 痞子衡嵌入式:MCUXpresso Config Tools初体验(Pins, Clocks, Peripherals)
  3. DOM浏览器的渲染原理简介
  4. 《软件架构与设计模式》思维导图
  5. 【显示器知识 帮新手扫盲+自我总结】
  6. 什么是CIF?什么是4CIF?什么是QCIF?什么是D1?
  7. 国内财务软件公司排名
  8. idea 调用webservice接口
  9. 尚学堂马士兵servlet/JSP笔记(二、servlet)
  10. 提升机类设备电动机保护器的保护范围及优化