发布时间:2025-12-10 19:37:56 浏览次数:10
Socks协议_socks5协议详解[通俗易懂]文章浏览阅读4.8k次。翻译至Wiki原文:http://en.wikipedia.org/wiki/SOCKSSocketSecure(SOCKS)是一个网络协议,可以通过代理服务器来路由客户端和服务器之间的数据包。SOCKS5还额外提供
翻译至Wiki
原文:http://en.wikipedia.org/wiki/SOCKS
Socket Secure(SOCKS)是一个网络协议,可以通过代理服务器来路由客户端和服务器之间的数据包。SOCKS5还额外提供了身份验证,所以只有验证的用户可以通过服务器。特别的,一个SOCKS服务器可以代理TCP连接到任何一个IP地址,同时为UDP的数据包提供一种转发方式
SOCKS完成的是OSI模型中第五层的工作(会话层,位于表示层和传输层之间)
历史
这个协议最初由David Koblas创造,David Koblas是MIPS计算系统的管理员,在1992年MIPS被Silicon Graphics接管之后,Koblas在那年的Usenix安全研讨会上发表了关于SOCKS的一篇文章,让SOCKS为公众所知,这个协议被NEC的Ying-Da Lee扩展到了第四个版本。
SOCKS参考架构和客户端被Permeo Technologies所拥有,是从NEC分拆出来
SOCKS5协议最初是一个安全协议被用来更容易的管控防火墙和其他安全产品,在1996年被IETF所批准,并与Aventail公司合作开发
用途
SOCKS是Circuit-level gateway(注:Circuit-level gateway是一种防火墙)事实上的标准
另外一种SOCKS的使用方式是作为规避工具,允许流量绕过网络过滤来获得内容,否则就被政府,学校,一些具体国家的web服务堵塞(译者注:说的就是翻墙的功能吧)。一些SSH套件,比如OpenSSH,支持动态端口转发,允许用户创建本地的SOCKS代理。这可以解除用户必须连接到一个预定义的远程端口和服务器的限制。
和HTTP代理的比较
SOCKS是一种比HTTP代理更低层的运转,SOCKS使用一种握手协议来通知代理软件关于客户端想要发起的连接,然后尽可能的做到透明。而普通的代理可能解释或重写报头
虽然HTTP代理有一个不同应用模型,CONNECT方法允许转发TCP连接。
SOCKS也可以做UDP转发和反向代理,而HTTP不能。
Protocol
SOCKS4
一个典型的SOCKS4连接请求是像这样的:
SOCKS客户端到SOCKS服务器:
报文域1:SOCKS版本号,一个字节。
报文域2:命令码,1个字节
0x01 建立一个TCP/IP流连接 0x02 建立一个TCP/IP端口绑定 报文域3:网络字节顺序端口号,2个字节 报文域4:网络字节顺序IP地址,4个字节 报文域5:用户ID字符串,可变长度,用一个null字符(0x00)终止SOCKS客户端到SOCKS服务器:
报文域1:SOCKS版本号,一个字节。
报文域2:命令码,1个字节
0x01 建立一个TCP/IP流连接 0x02 建立一个TCP/IP端口绑定 报文域3:网络字节顺序端口号,2个字节 报文域4:无效的IP地址,4个字节,前3个字节为0x00,最后一个是非0x00 报文域5:用户ID字符串,可变长度,用一个null字符(0x00)终止 报文域6:我们想联系的域名,可变长度,用0x00结束SOCKS5协议在RFC1928中有定义,这是SOCKS4协议的一种拓展,它提供了更多的认证选择,并且添加了对IPv6和UDP的支持,最后它提供了DNS查询,初始的握手过程总结如下:
客户端连接并发送一个问候(包括一组支持的认证方式)服务器选择一个(如果没有可接受的认证方式返回一个错误响应)根据选择的认证方式在客户端和服务器直接传递几条信息客户端发送一个和SOCK4相似的连接请求服务器端返回一个和SOCKS4相似的响应 以下是支持的认证方式0x00:无认证方式0x01:GSSAPI0x02:用户名/密码0x03-0x7F:IANA分配的方法0x80-0xFE:保留为私有使用的方法 客户端发送的初始问候报文