这是我参与「第三届青训营 -后端场」笔记创作活动的的第 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抓包来查看,验证自己写的是否正确。