Socks5代理 | 青训营笔记

85 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第 3 篇笔记

socks5代理是位于传输层(如TCP/UDP等)和应用层之间的一个代理协议,那么大家知道怎么理解socks5代理吗?

其连接请求有以下工作流程:

  • 1、客户将要求的信息发送到代理服务器供其协商版本和认证方法。
  • 2、代理服务器响应,将选定的方法发送给客户端。
  • 3、客户和代理服务器进入按选定的认证方法确定的分协商程序。
  • 4、子级协商过程结束后,客户端发送请求信息,其中明确说明目标服务器的IP地址和端口。
  • 5、代理服务器认证客户机,通过认证后连接到目标服务器上。

即分为三大步:认证、请求、转发。

认证

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

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

第二步,代理服务器从给定的方法列表中选择一个方法并返回选择报文

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

请求

同样的,在认证通过后,客户端要向代理服务器发送的请求报文

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

也和上一步类似,有请求代理服务器就要有应答

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

转发

当连接建立后,客户端就可以和正常一样访问服务端通信了。

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

当然也可以通过wireshark抓包来查看,验证自己写的是否正确。