Sock5协议(二)

SOCKS5 协议详解 SOCKS5 协议支持客户端与目标服务器之间的透明代理通信。 阅读详情

一个被公认的一个协议。

文章摘要:
  该文档描述了一个应用层的用于穿越IP网络防火墙的协议。这种穿越的安全性是高度依赖于正规的认证和正规执行方法提供的有效封装,以及在SOCKS客户端和SOCKS服务端所选择的安全性,还有管理员对认证方法选项所作的小心周密的考虑。 
        

--------------------------------------------------------------------------------
 
正文:   

SOCKS 5协议详解   

  笔者在实际学习中,由于在有些软件用到了socks5(如oicq,icq等),对其原理不甚了解,相信很多朋友对其也不是很了解,于是仔细研读了一下rfc1928,觉得有必要译出来供大家参考。

1.介绍:

  防火墙的使用,有效的隔离了机构的内部网络和外部网络,这种类型的Internet架构变得越来越流行。这些防火墙系统大都充当着网络之间的应用层网关的角色,通常提供经过控制的Telnet,FTP,和SMTP访问。为了推动全球信息的交流,更多的新的应用层协议的推出。这就有必要提供一个总的架构使这些协议能够更明显和更安全的穿过防火墙。也就有必要在实际上为它们穿过防火墙提供一个更强的认证机制。这种需要源于客户机-服务器联系在不同组织网络之间的实现,而这种联系需要被控制和是很大程度上被认证的。
  该协议被描述为用来提供在TCP和UDP域下为客户机-服务器应用程序便利和安全的穿过防火墙的一个架构。该协议在概念上被描述为一个介于应用层和传输层之间的"隔离层",但是这类服务并不提供网络层网关服务,如ICMP报文的传输。

2.现状:

  SOCKS 4为基于TCP的客户机-服务器应用程序提供了一种不安全的穿越防火墙的机制,包括TELNET,FTP和当前最流行的信息发现协议如HTTP,WAIS和GOPHER.
  新协议为了包括UDP扩展了SOCKS 4,为了包括对总体上更强的认证机制的支持扩展了协议架构,为了包括域名和IPv6地址的支持扩展了地址集。
  SOCKS协议执行最具代表性的是包括了在SOCKS库中利用适当的封装程序来对基于TCP的客户程序进行重编译和重链结。

注意:
  除非特别提及,封装在包格式中的十进制数表示的是通讯域的长度(用八位组octect表示)。一个给定的八位组必须具有指定的值,格式X'hh'被用来表示在该域中单个八位组的值。当单词"变量Variable"被使用时,它指出了通讯域拥有一个可变长度,这个可变长度要么由一个联合的(一个或两个八位组)长度域定义,要么由一个数据类型域所定义。

3.基于TCP客户机的程序

  当一台基于TCP的客户机希望和目标主机建立连接时,而这台目标主机只有经过防火墙才能到达(这种情况?一直持续到?它被执行时),它就必须在SOCKS服务器端的适当的SOCKS端口打开一个TCP连结。SOCKS服务按常例来说定位于TCP端口1080。如果连接请求成功,客户机为即将使用的认证方式进行一种协商,对所选的方式进行认证,然后发送一个转发请求。SOCKS服务器对该请求进行评估,并且决定是否建立所请求转发的连接。
  客户机连接到服务器,发送一个版本标识/方法选择报文:

  +----+----------+----------+
  |VER | NMETHODS | METHODS |
  +----+----------+----------+
  | 1 |   1  | 1 to 255 |
  +----+----------+----------+

  VER(版本)在这个协议版本中被设置为X'05'。NMETHODS(方法选择)中包含在METHODS(方法)中出现的方法标识八位组的数目。
  服务器从METHODS给出的方法中选出一种,发送一个METHOD selection(方法选择)报文:

  +----+--------+
  |VER | METHOD |
  +----+--------+
  | 1 |  1  |
  +----+--------+

  如果所选择的METHOD的值是X'FF',则客户机所列出的方法是没有可以被接受的,客户机就必须关闭连接。

当前被定义的METHOD的值有:
  >> X'00' 无验证需求
  >> X'01' 通用安全服务应用程序接口(GSSAPI)
  >> X'02' 用户名/密码(USERNAME/PASSWORD)
  >> X'03' 至 X'7F' IANA 分配(IANA ASSIGNED)
  >> X'80' 至 X'FE' 私人方法保留(RESERVED FOR PRIVATE METHODS)
  >> X'FF' 无可接受方法(NO ACCEPTABLE METHODS)
***IANA是负责全球INTERNET上的IP地址进行编号分配的机构(译者著)***
  于是客户机和服务器进入方法细节的子商议。方法选择子商议另外描述于独立的文档中。
  欲得到该协议新的METHOD支持的开发者可以和IANA联系以求得到METHOD号。已分配号码的文档需要参考METHOD号码的当前列表和它们的通讯协议。
  如果想顺利的执行则必须支持GSSAPI和支持用户名/密码(USERNAME/PASSWORD)认证方法。

4.需求

  一旦方法选择子商议结束,客户机就发送请求细节。如果商议方法包括了完整性检查的目的和/或机密性封装,则请求必然被封在方法选择的封装中。

SOCKS请求如下表所示:

  +----+-----+-------+------+----------+----------+
  |VER | CMD | RSV | ATYP | DST.ADDR | DST.PORT |
  +----+-----+-------+------+----------+----------+
  | 1 |  1 | X'00' |  1 | Variable |   2  |
  +----+-----+-------+------+----------+----------+

其中:
o VER protocol version:X'05'
o CMD
 o CONNECT X'01'
 o BIND X'02'
 o UDP ASSOCIATE X'03'
o RSV RESERVED
o ATYP address type of following address
 o IP V4 address: X'01'
 o DOMAINNAME: X'03'
 o IP V6 address: X'04'
o DST.ADDR desired destination address
o DST.PORT desired destination port in network octet order

5.地址

  在地址域(DST.ADDR,BND.ADDR)中,ATYP域详细说明了包含在该域内部的地址类型:
    o X'01'

  该地址是IPv4地址,长4个八位组。
    o X'03'

  该地址包含一个完全的域名。第一个八位组包含了后面名称的八位组的数目,没有中止的空八位组。
    o X'04'

  该地址是IPv6地址,长16个八位组。

6.回应

  到SOCKS服务器的连接一经建立,客户机即发送SOCKS请求信息,并且完成认证商议。服务器评估请求,返回一个回应如下表所示:


  +----+-----+-------+------+----------+----------+
  |VER | REP | RSV | ATYP | BND.ADDR | BND.PORT |
  +----+-----+-------+------+----------+----------+
  | 1 | 1 | X'00' | 1  | Variable |   2  |
  +----+-----+-------+------+----------+----------+

其中:

o VER protocol version: X'05'
o REP Reply field:
  o X'00' succeeded
  o X'01' general SOCKS server failure
  o X'02' connection not allowed by ruleset
  o X'03' Network unreachable
  o X'04' Host unreachable
  o X'05' Connection refused
  o X'06' TTL expired
  o X'07' Command not supported
  o X'08' Address type not supported
  o X'09' to X'FF' unassigned
o RSV RESERVED
o ATYP address type of following address
  o IP V4 address: X'01'
  o DOMAINNAME: X'03'
  o IP V6 address: X'04'
o BND.ADDR server bound address
o BND.PORT server bound port in network octet order
标志RESERVED(RSV)的地方必须设置为X'00'。

  如果被选中的方法包括有认证目的封装,完整性和/或机密性的检查,则回应就被封装在方法选择的封装套中。

CONNECT

  在CONNECT的回应中,BND.PORT包括了服务器分配的连接到目标主机的端口号,同时BND.ADDR包含了关联的IP地址。此处所提供的BND.ADDR通常情况不同于客户机连接到SOCKS服务器所用的IP地址,因为这些服务器提供的经常都是多址的(muti-homed)。都期望SOCKS主机能使用DST.ADDR和DST.PORT,连接请求评估中的客户端源地址和端口。

BIND

  BIND请求被用在那些需要客户机接受到服务器连接的协议中。FTP就是一个众所周知的例子,它通过使用命令和状态报告建立最基本的客户机-服务器连接,按照需要使用服务器-客户端连接来传输数据。(例如:ls,get,put)
都期望在使用应用协议的客户端在使用CONNECT建立首次连接之后仅仅使用BIND请求建立第二次连接。都期望SOCKS主机在评估BIND请求时能够使用DST.ADDR和DST.PORT。
  有两次应答都是在BIND操作期间从SOCKS服务器发送到客户端的。第一次是发送在服务器创建和绑定一个新的socket之后。BIND.PORT域包含了SOCKS主机分配和侦听一个接入连接的端口号。BND.ADDR域包含了关联的IP地址。  客户端具有代表性的是使用这些信息来通报应用程序连接到指定地址的服务器。第二次应答只是发生在预期的接入连接成功或者失败之后。在第二次应答中,BND.PORT和BND.ADDR域包含了欲连接主机的地址和端口号。

UDP ASSOCIATE(连接?)

  UDP 连接请求用来建立一个在UDP延迟过程中操作UDP数据报的连接。DST.ADDR和DST.PORT域包含了客户机期望在这个连接上用来发送UDP数据报的地址和端口。服务器可以利用该信息来限制至这个连接的访问。如果客户端在UDP连接时不持有信息,则客户端必须使用一个全零的端口号和地址。

  当一个含有UDP连接请求到达的TCP连接中断时,UDP连接中断。

  在UDP连接请求的回应中,BND.PORT和BND.ADDR域指明了客户端需要被发送UDP请求消息的端口号/地址。

回应过程

  当一个回应(REP值非X'00')指明失败时,SOCKS主机必须在发送后马上中断该TCP连接。该过程时间必须为在侦测到引起失败的原因后不超过10秒。
  如果回应代码(REP值为X'00')时,则标志成功,请求或是BIND或是CONNECT,客户机现在就可以传送数据了。如果所选择的认证方法支持完整性、认证机制和/或机密性的封装,则数据被方法选择封装包来进行封装。类似,当数据从客户机到达SOCKS主机时,主机必须使用恰当的认证方法来封装数据。

7.基于UDP客户机的程序

  一个基于UDP的客户端必须使用在

Sock5协议详解 Sock5协议详解 由于项目需求,最近需要了解一些代理的知识,因此看了一下sock5协议。主要还是RFC1928.也参考了网上的一些翻译。 防火墙的使用,有效的隔离了机构内部网络和外部网络,这种类型的Internet架构变得越来越流行了。这种防火墙系统大都充当着网络之间的 应用层网关的角色,通常提供经过控制的Telnet、FTP和SMTP访问。为了推动全球信息的交流,更多的新的应用层协议 阅读详情

相关推荐

SOCK5代理服务器透明穿透技术

 SOCK5代理服务器透明穿透技术一、目标(Target)在尽量不改变现有代码的情况下,透明穿越socks 5代理。、技术分析(Technology Analyse)2.1 sock 5 代理分析由于目前socks规范中,socks4不支持UDP,只有socks5才支持,而目前视频应用中,码流传输采用的是UDP,所以如果客户端只支持SOCK4代理,则视频应用将受到限制。从

雨雪逝去(Sambios)的专栏 2万+

Socks5工作原理与搭建

Socks5协议是一款广泛使用的代理协议,它在使用TCP/IP协议通讯的客户端和服务器之间扮演一个中介角色,使得内部网中的客户端变得能够访问Internet网中的服务器,或者使C/S(Client和Server)之间的通讯更加安全。SOCKS5 代理服务器通过将客户端发来的请求转发给真正的目标服务器, 模拟了一个客户端请求操作。

顺其自然~专栏 4125

CentOS7 编译升级GCC至9.3.0

1)下载GCC9.2.0源码并解压 从GCC官方FTP下载地址可以看到GCC最新版本为9.3.0。由于官网下载速度慢,实际上用清华大学的镜像站进行下载,代码如下: wget -c /opt/tmp/ https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-9.3.0/gcc-9.3.0.tar.gz #考虑到安装失败的可能性,创建一个临时文件夹来安装GCC...

haha123486的博客 1万+

socks5学习

------------本文仅用于学习记录使用。

abcdefglouy的博客 1552

socks5协议详细说明

由浅入深带大家详细了解socks5协议。 首先会对socks协议进行简单介绍 然后介绍它的工作工程 最后介绍协议的细节

小哥(xpc) 7562

实现Sock5代理

实现Sock5代理有很多公司不能直接和Internet相连,必须通过代理和www连接,浏览、下载资料。代理服务器支持的协议也有所不同,有支持Sock、HTTP代理的这样我们做的客户端软件就需要支持这些代理,使用户能够通过这些代理透过防火墙和外网相连,一般Sock分为Sock4和Sock5,这里我们只实现Sock5协议。RFC1928描述了Socks协议的细节,告诉我们客户程序如何同So

lostpen的专栏 1万+

Sock5协议()

SOCKS Protocol Version 5工作原理http://www.faqs.org/rfcs/rfc1928.htmlsock5代理的工作程序是: (转贴)1.需要向代理方服务器发出请求信息。 2.代理方应答 3.需要代理方接到应答后发送向代理方发送目的ip和端口 4.代理方与目的连接 5.代理方将需要代理方发出的信息传到目的方,将目的方发出的信息传到需要代理方。代理完成。

[橫渡] 3899

sock5系列之模拟tcp请求sock5服务器!(三)

直接上干货*****代码不能拿来就测试,得有sock5服务器的环境!----》sock5环境搭建请看相关系列文章sock5系列之centos6.5 搭建!(一) package socket.check.ip; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; i

开心就好~~~专栏 1550

UDP下的SOCK5代理实现

格式可以参考以下url中的内容:  http://www.vckbase.net/document/viewdoc/?id=853  http://www.vckbase.net/document/viewdoc/?id=852upd Sock5代理下的包数据: client:      ver( 1 byte)+num method( 1 byte)+ methods(1 -255 byte) 

蘸月居 1601

SOCK5代理服务的设计与实现

对于服务器而言,SOCK5协议的流程可用四个步骤解释: 协商 > 验证 > 接收请求 > 转发数据 SOCK5在RFC1928及RFC1929中有详细说明,RFC1928描述了SOCK5的“协商、接收请求”,RFC1929描述了SOCK5的“验证”过程。 对于上面的四个步骤,可简要地概述如下(以客户端对过代理connect远程主机为例): 1、 在SOCK5的协商过程中,客户端向服

caschaoxin的专栏 2172

Linux下采用ss5搭建sock5服务器&使用proxychains进行sock5客户端代理

Linux下采用ss5搭建sock5服务器&使用proxychains进行sock5客户端代理1.ss5搭建sock5服务器1.1下载ss5源码1.2安装相关yum依赖1.3编绎安装1.4修改SS5配置文件1.5给bash文件增加可执行权限/etc/rc.d/init.d/ss51.6启动/停止/重启ss51.7如果需要开启账号密码认证1.8如果需要修改默认的1080端口2.proxychains-ng搭建sock5客户端2.1下载proxychains2.2编绎安装 1.ss5搭建sock5服务

冰之杍的博客 4127

关于Socket通信中SOCK_STREAM和SOCK_DGRAM区别

SOCK_STREAM 是有保障的(即能保证数据正确传送到对方)面向连接的SOCKET,多用于资料(如文件)传送。 SOCK_DGRAM 是无保障的面向消息的socket , 主要用于在网络上发广播信息。 SOCK_STREAM是基于TCP的,数据传输比较有保障。SOCK_DGRAM是基于UDP的,专门用于局域网,基于广播 SOCK_STREAM 是数据流,一般是tcp/ip协议的编程,SOCK_DGRAM分是数据包,是udp协议网络编程 解释一下: 关于UDP 1、UDP协议适用端...

qq_14874791的博客 1万+

SOCKS5协议

使用SOCKS5协议时,客户端首先与代理服务器建立连接,并发送代表目标服务器的请求。代理服务器接收到请求后,会与目标服务器建立连接,并将数据传输转发给目标服务器。目标服务器将响应数据发送给代理服务器,再由代理服务器转发给客户端。SOCKS5Socket Secure 5)是一种网络协议,用于在客户端和服务器之间进行代理传输。它是SOCKS协议的第五个版本,相比于之前的版本,它提供了更多的功能和安全性。

XYS_xiaoxiong的博客 405

Socks5 协议简介

UDP服务器接收到信息之后,对来源进行筛选,如果收到的UDP包来自第一次收到的请求包中的 (DST.ADDR, DST.PORT),那么,就认为是来自客户端,需要对数据包的头部进行解析,获取到该数据包需要到达的地址。如果连接成功,回复的数据包中的 BND.ADDR,BND.PORT 没有太大的意义,象征性的填写Socks 服务端在此次连接中使用的 ADDR 和 PORT 即可。此时,服务端尝试使用TCP协议连接对应的 (DST.ADDR, DST.PORT),根据连接的情况,决定 REP 的值。

D0126_的博客 1645

Socks5协议

socks5协议 原理 socks5 协议简介 实现SOCKS5协议 | 鱼儿的博客 socks是一种网络传输协议,主要用于客户端与外网服务器之间通讯的中间传递。根据OSI七层模型来划分,SOCKS属于会话层协议,位于表示层与传输层之间。主要流程如下图所示 ,参考: Writing a simple SOCKS server in Python | Artem Golubin Python编写socks5服务器 | HatBoy的个人主页 SOCKS协议第五版(SOCKS Protocol Version

lurenyi0724的博客 1594

从零实现加密隧道():socks5 协议详解

socks的文档:https://www.ietf.org/rfc/rfc1928.txt SOCKS5 是一种网络传输协议,主要用于客户端与外网服务器之间通讯的中间传递。SOCKS 是 "Sockets"的缩写。 SOCKS5 工作在比 HTTP 代理更低的层次。 是一个代理协议,它在使用TCP/IP协议通讯的前端机器和服务器机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet网中的服务器,或者使通讯更加安全。SOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器,模拟了一

cccccccj 1万+

合肥工业大学操作系统实验9

依据操作系统课程所介绍的页面置换算法与动态内存分配的原理,本实验的目的是掌握OPT、FIFO、LRU、LFU、Clock等页面置换算法;掌握可用空间表及分配方法;掌握边界标识法以及伙伴系统的内存分配方法和回收方法。从而深入理解操作系统的内存管理。从而加深对教材上页面置换算法与动态内存分配的理解。

Martin-share的博客 1071

即时通讯管理系统(Java+SpringBoot+vue+elementui)

本系统是一个在线聊天的交友平台,主要功能模块包括登录、注册、会话、通讯录、收藏、好友管理、消息发送、文件下载、图片预览、个人资料管理等功能,其中消息发送支持文本发送、图片发送、文件发送等。本系统进行了前后端分离,前端使用 vue+elementui,后端使用java常用框架SpringBoot+Mybatis+MybatisPlus 等,数据库使用 Mysql,缓存数据库使用 Redis。该资源包包含前端源码、后端源码以及数据库备份。如果对源码及部署有疑问,欢迎随时联系我!具体效果图请看:https://blog.csdn.net/xch_yang/article/details/128003569

上一篇: Sock5协议(一)
下一篇: 用VC++6.0编写Proxy服务器
bgu
bgu
博客等级 码龄24年 14粉丝 121原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值