深入解析:SOCKS5协议及其应用场景

更新:10-29 神话故事 我要投稿 纠错 投诉

大家好,关于深入解析:SOCKS5协议及其应用场景很多朋友都还不太明白,今天小编就来为大家分享关于的知识,希望对各位有所帮助!

2、SOCKS版本。该协议最初由David Koblas 开发,后来由NEC 的Ying-Da Lee 扩展到版本4。最新的协议是版本5。与之前的版本相比,SOCKS5做了以下增强:

增加了对UDP协议的支持;支持多种用户认证方式和通信加密方式;修改了socks服务器的域名解析方式,使其更加优雅;3、SOCKS网络代理层次。SOCKS是一种网络传输协议,主要用于客户端与外部网络服务器通信的中间传输。根据OSI七层模型,SOCKS是会话层协议,位于表示层和传输层之间。

4、SOCKS软件部署架构。SOCKS实际上分为客户端和服务器端共同完成代理目标。在客户端进行socket网络编程时,SOCKS提供了一套与传统socket接口(socket、listen、bind等)一致的接口SDK供应用层调用。此类软件最著名的是SocksCap32,它是Permeo公司出品的早期产品,后来它提供了Permeo Security Driver(称为PSD)SDK。在服务器端,通常会提供一台服务器来提供SOCKS代理服务,通常监听1080端口。用户将客户端请求和流量代理到目的服务器。常见的SOCKS服务如shadowsock等

图1socks代理网络模式

二、SOCKS代理流程

图2socks代理简单流程图

上图是socks代理的简单流程。客户端与SOCKS代理服务器建立TCP三向握手连接。这里需要说明的是,无论客户端要与目标服务器建立TCP连接还是UDP连接,客户端都需要先与SOCKS代理服务器建立TCP连接。

与SOCKS代理服务器建立连接后,开始进行身份认证。目前,在SOCKS服务器上比较常用或实现的两种方法是无认证和用户名/密码。

身份认证通过后,客户端开始请求SOCKS服务器相应的代理命令。目前,SOCKS5协议规定了三种代理命令(connect、bind、udp)。

SOCKS代理服务器根据客户端请求的命令执行相应的代理模式,与目标服务器建立连接。

接下来,客户端像正常网络发送和接收数据包一样开始网络通信。

三、SOCKS协议

阶段一:TCP请求

tcp三次握手建立连接的过程这里省略,因为这部分不属于协议部分。

阶段二:认证过程

与SOCKS代理服务器建立tcp连接后,客户端开始发起身份验证过程。在此过程中,客户端与服务器协商认证方法。

1、客户端请求认证VERSIONMETHODS_COUNTMETHODS1 Byte 1 Byte 1 到255 个字节,长度由METHODS_COUNT 值决定0x050x030x000x010x02VERSION SOCKS 协议版本,目前固定0x05METHODS_COUNT 客户端支持的认证方法数量METHODS. 客户端支持的认证方法,每种method 占用1 个字节METHOD定义0x00 无需认证(常用)0x01 GSSAPI 认证0x02 账号密码认证(常用)0x03 -0x7F IANA 分配0x80 -0xFE 私有方法保留0xFF 不支持的认证方法2、服务器返回选定的认证方法a、无需认证VERSIONMETHOD1 字节1 byte0x050x00b、账号密码认证VERSIONMETHOD1 byte 1 byte0x050x02VERSIONSOCKS 协议版本,目前固定0x05METHOD此连接使用的验证方法,0x00 不需要验证,0x02 帐户密码验证3、如果为账号密码认证客户端再次发送账密密码进行认证VERSIONUSERNAME_LENGTHUSERNAMEPASSWORD _LENG THPASSWORD1 字节1 字节1- 255 Bytes 1 Bytes 1-255 Bytes0x010x010x0a0x010x0aVERSION认证子协商版本(与SOCKS 协议版本0x05 无关)USERNAME_LENGTH用户名长度USERNAME用户名字节数组,长度为USERNAME_LENGTH 010-5900 0 密码长度010 -59000 密码字节数组,长度PASSWORD_LENGTHPASSWORD_LENGTHVERSIONSTATUS1 byte 1 bytePASSWORD认证子协商版本,与客户端VERSION 字段一致4、服务器响应账号密码认证结果认证结果(0x00 认证成功大于0x00 认证失败)

阶段三:命令过程

客户端与SOCKS代理服务器之间的身份验证阶段结束,客户端开始向代理服务器发送命令协议,指示代理服务器下一步启用哪种代理模式(TCP/UDP)。这里SOCKS5协议规定了三个命令,分别是CONNECT、BIND、UDP ASSOCIATE。

VERSIONVERSIONCOMMANDRSVADDRESS_TYPEDST.ADDRDST.PORT1 Byte 1 Byte 1 Byte 1 Byte 1-255 Byte 2 ByteSTATUSSOCKS 协议版本,固定0x051、客户端发起命令请求Command0x01 CONNECT 连接到目标服务器0x02 BIND 绑定,客户端将收到来自代理服务器的链接,这意味着告诉代理服务器创建一个套接字并侦听来自目标机器的连接。主动连接客户端的FTP服务器等应用场景。0x03 UDP ASSOCIATE UDP 中继VERSION保留字段COMMAND目标服务器地址类型0x01 IP V4 地址0x03 域名地址(没有错字,只是没有0x02),域名地址的第一个字节是域名长度,剩余字该部分为域名字节数组0x04 IP V6 地址RSVip 地址ADDRESS_TYPE端口号DST.ADDRCONNECT 要连接的目标服务器的IP 地址和端口号BIND 的IP 地址和端口号您要连接到UDP ASSOCIATE 客户端的目标服务器本地使用的IP 地址和端口号。代理服务器可以使用此信息来限制访问。DST.PORTVERSIONRESPONSERSVADDRESS_TYPEBND.ADDRBND.PORT1 Byte 1 Byte 1 Byte 1 Byte 1-255 Byte 2 Byte说明:这里的DST.ADDR和DST.PORT在COMMAND不同时有不用的表示SOCKS protocol version, fixed0x052、代理服务器响应Response command0x00 Proxy server successfully connected to the target server0x01 Proxy Server failure0x02 Proxy服务器规则集不允许连接0x03 网络不可访问0x04 目标服务器不可访问(主机名无效)0x05 与目标服务器的连接被拒绝0x06 TTL 已过期0x07 不支持的命令0x08 不支持的目标服务器地址类型0x09 -0xFF 未分配VERSION保留字段RESPONSE代理服务器成功连接目标服务器后的代理服务器IPRSV代理服务器成功连接目标服务器后的代理服务器端口BND.ADDRCONNECT 此时绑定的地址是指代理服务器连接IP并在到达目标机器时进行端口BIND。这里有两个回应。第一个响应是指代理服务器创建监听套接字时绑定的IP和端口。第二个响应是指代理服务器的侦听套接字接收来自目标机器的连接。此时的ip和port UDP ASSOCIATE表示客户端向服务器发送UDP报文的端口和地址。

阶段四:数据转发

如果代理是tcp连接,则直接转发tcp数据。如果代理是UDP数据,则在客户端和代理服务器之间转发之前需要对原始UDP数据包进行封装。

RSVFRAGATYPDST.ADDRDST.PORTDATA2 Byte 1 Byte 1 Byte 1-255 Byte 2 Byte 变量RSV 保留字段FRAG 数据包编号ATYP 目标服务器地址类型0x01 IP V4 地址0x03 域名地址(没有错别字,没有0x02),域名第一个字节地址的长度为域名长度,其余字节为域名字节数组0x04 IP V6 地址DST.ADDR 目标服务器地址DST.PORT 目标服务器端口DATA 用户数据

四、实例分析

本示例流程演示UDP 代理以及数据包捕获过程。

UDP服务:127.0.0.1:19999(每次收到请求包,都会返回字符串“this is udp server”给客户端)

SOCKS代理服务:127.0.0.1:1080

BND.PORT号489,490,491。客户端127.0.0.1:26551向127.0.0.1:1080请求TCP三向握手协议。

pSFDRa9.png说明:这里的DST.ADDR和DST.PORT在COMMAND不同时有不用的表示1. No. 492. 客户端发起认证请求。版本为0x05,客户端认证方式总数为0x01,认证方式0x00未认证。编号493 是TCP ACK 确认数据包。

pSFDOIA.png

pSFDjPI.png2,编号494。代理服务器回复请求版本为0x05,验证方式确认为0x00,未验证。编号495是TCP确认包。

pSFrpM8.png

pSFrCqg.png阶段一:TCP请求。1. No. 496. 客户端向代理服务器发送命令请求包版本为0x05,命令字为0x03(udp关联)。客户端的IP端口号为127.0.0.1:60842。编号497是TCP请求确认包。

pSFr8iR.png

pSFrJRx.png2,编号498。代理服务器向客户端回复确认包,版本为0x05,状态为0x00成功,代理服务器启用的UDP地址为127.0.0.1:60843。编号499是TCP确认包。

498-1.png

498-2.png阶段二:认证过程。1. 数字500是客户端发送给代理服务器的UDP数据报文。客户端地址为127.0.0.1:60842,服务器地址为127.0.0.1:60843。封装的UDP负载中保留字段0x00,分片0x00,地址类型ipv4,要连接的远程服务器地址端口为127.0.0.1:19999,发送的数据为“一些数据”。

500-1.png

500-2.png2,编号501是代理服务器127.0.0.1:60843发送常规UDP数据包到远程udp服务器127.0.0.1:19999。

501-1.png

501-2.png3,编号502,远程UDP服务器127.0.0.1:19999向代理服务器127.0.0.1:60843返回数据,返回“this is udp server”。

502-1.png

502-2.png4,编号503是代理服务器127.0.0.1:60843将远程服务器的返回数据转发给客户端127.0.0.1:60842。打包的udp负载中保留字段0x00,分片0x00,地址类型ipv4,远程服务器地址端口为127.0.0.1:19999,发送的数据为“this is udp server”。

503-1.png

503-2.png

五、引用

https://www.rfc-editor.org/rfc/rfc1928.txt

用户评论

苍白的笑〃

终于有人来介绍SOCKS5协议了!一直想了解这种网络代理协议机制。

    有14位网友表示赞同!

那伤。眞美

学习一下最新版的SOCKS协议,希望能提高网络安全知识!

    有9位网友表示赞同!

未来未必来

这个SOCKS协议在现代网络架构下显得越来越重要了吧?

    有14位网友表示赞同!

墨城烟柳

看了一下标题,感觉这篇文章能帮我解决一些关于网络匿名访问的问题!

    有5位网友表示赞同!

鹿叹

我有一个项目需要用到代理服务器,看来这篇文章很适合我参考一下。

    有11位网友表示赞同!

_心抽搐到严重畸形っ°

SOCKS协议和HTTPS的关系是什么? 文章里有详细介绍吗?

    有6位网友表示赞同!

嗯咯

好奇这种协议的安全性怎么样?

    有20位网友表示赞同!

半梦半醒半疯癫

我听说有很多专业的防火墙可以绕过SOCKS5协议?

    有5位网友表示赞同!

煮酒

想要了解一下这个协议在游戏网络上是怎么应用的。

    有19位网友表示赞同!

安之若素

作者分析的会不会比较深入,比如不同的版本有什么区别?

    有12位网友表示赞同!

风中摇曳着长发

分享一下你最近学习到的关于SOCKS5知识吧!

    有20位网友表示赞同!

追忆思域。

感觉这篇文章应该能比较清楚地解释SOCKS5的工作原理。

    有14位网友表示赞同!

繁华若梦

期待看看文章里有没有提到一些常用的SOCKS5代理服务器。

    有15位网友表示赞同!

秒淘你心窝

我以前觉得这种协议很复杂,现在希望能从这篇分析中得到一些思路!

    有9位网友表示赞同!

人心叵测i

这篇文章能帮我更好地理解为什么要使用SOCKS5协议吗?

    有14位网友表示赞同!

凉话刺骨

在技术发展日新月异的时代,学习SOCKS5协议显得尤为重要!

    有10位网友表示赞同!

素衣青丝

想要了解更多关于这个协议及其应用场景的信息。

    有18位网友表示赞同!

你的眸中有星辰

希望这篇文章能提供一些实用性的建议和技巧。

    有18位网友表示赞同!

隔壁阿不都

看完这篇文章,我就能自己搭建一个SOCKS5代理吗?

    有17位网友表示赞同!

最迷人的危险

学习了SOCKS5之后,感觉网络知识储备得到了提升!

    有19位网友表示赞同!

【深入解析:SOCKS5协议及其应用场景】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活

上一篇:2023年度美瞳品牌排行:盘点最受欢迎的十大美瞳品牌 下一篇:揭秘热门赚钱应用:盘点排行前十的盈利APP