SOCKS5的原理与应用
Socks5介绍:
Socks5是一个代理协议,它在使用TCP/IP协议通讯的前端机器和服务器之间扮演一个中间角色,使得内部网中的前端机器能够访问Internet网中的服务器,Socks5提供多种身份验证,只有授权用户才能访问服务器,这极大提升了通讯的安全性。
SOCKS5服务器通过将前端发来的请求转发给真正的目标服务器,模拟了一个前端的行为。在这里,前端和Socks5之间也是通过TCP/IP协议进行通讯,前端将原本要发送给真正服务器的请求发送给Socks5服务器,然后Socks5服务器将请求转发给真正的服器。
Socks5代理的工作原理:
1、向代理方服务器发出请求信息
2、代理方应答
3、需要代理方接到应答后,才向代理方发送目的ip和端口
4、代理方与目的连接
5、代理方将需要将被代理方发出的信息传到目的方,将目的方发出的信息传到被代理方。代理完成。
Socks5验证连接:
1.支持的身份验证方法编号
0x00:无身份验证
0x01:GSSAPI
0x02:用户名/密码
0x03-0x7F:IANA分配的方法
0x80-0xFE:保留供私人使用的方法
来自客户端的消息:
字段1:SOCKS版本,1个字节(此版本为0x05)
字段2:支持的认证方法的数量,1个字节
字段3:认证方法,可变长度,每种方法支持1个字节
服务器的回应选择:
字段1:SOCKS版本,1个字节(此版本为0x05)
字段2:如果没有提供可接受的方法,则选择认证方法,1字节或0xFF
后续身份验证取决于方法。
2.对于用户名/密码验证
客户端的验证请求:
字段1:版本号,1个字节(当前版本的用户名/密码认证为0x01)
字段2:用户名长度,1个字节
字段3:用户名,1-255字节
字段4:密码长度,1个字节
字段5:密码,1-255字节
服务器响应:
字段1:版本,1个字节(当前版本的用户名/密码认证为0x01)
字段2:状态码,1个字节
0x00:成功
任何其他值都是失败的,必须关闭连接
3.连接
客户端的连接请求:
字段1:SOCKS版本号,1个字节(此版本为0x05)
字段2:命令代码,1个字节:
0x01:建立TCP / IP流连接
0x02:建立TCP / IP端口绑定
0x03:关联UDP端口
字段3:保留,必须是0x00,1个字节
字段4:地址类型,1字节:
0x01:IPv4地址
0x03:域名
0x04:IPv6地址
字段5:目的地址
IPv4地址为4个字节
名称长度为1个字节,后跟域名为1-255个字节
IPv6地址为16个字节
字段6:网络字节顺序的端口号,2个字节
服务器响应:
字段1:SOCKS协议版本,1个字节(此版本为0x05)
字段2:状态,1个字节:
0x00:请求已授予
0x01:一般失败
0x02:规则集不允许连接
0x03:网络无法访问
0x04:主机无法访问
0x05:目标主机拒绝连接
0x06:TTL已过期
0x07:命令不支持/协议错误
0x08:不支持地址类型
字段3:保留,必须是0x00,1个字节
字段4:地址类型,1字节:
0x01:IPv4地址
0x03:域名
0x04:IPv6地址
字段5:服务器绑定的地址
IPv4地址为4个字节
名称长度为1个字节,后跟域名为1-255个字节
IPv6地址为16个字节
字段6:网络字节顺序中的服务器绑定端口号,2个字节
Sock5应用场景案例:
国外的某网游服务器仅允许本国的iP进行连接,非本地玩家为了突破这种限制,可以找一个该地区的socks5代理服务器,然后用PSD接管网游客户端,通过socks5代理服务器连接游戏服务器。这样游戏服务器就会认为该玩家的客户端位于本地区,从而允许该玩家参加游戏。