Socks5协议简介

 我来答
天然槑17
2022-07-22 · TA获得超过1.1万个赞
知道大有可为答主
回答量:6272
采纳率:100%
帮助的人:35.2万
展开全部

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

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

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

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

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

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

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

客户端发送第二帧数据:

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,回复

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

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
赫优信(上海)自动化系统贸易有限公司_
2024-08-27 广告
德国赫优讯netTAP网关解决方案有两种,netTAP网关系列能够简便有效地实现两种通讯协议的转换,模块化设计的网关采用DIN导轨安装,提供了两种通讯协议的接口。netTAP通过基于FDT/DTM技术的配置工具进行配置和诊断。1.netTA... 点击进入详情页
本回答由赫优信(上海)自动化系统贸易有限公司_提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式