关于代理
@ 需求这部分知识,收集整理于网上
先说VPN
VPN(Virtual Private Network),即虚拟专用网或虚拟私用网,是指利用开放的公共网络资源建立私有专用传输通道。而我们提供的VPN就是使客户利用internet互联网这个公共网络建立建立客户的个人电脑-VPN服务器之见的私有专用传输通道。连接VPN后客户的所有网络数据都将通过这个通道进行传输。
严格来说VPN并不是代理,但大家都用它来实现代理的功能,所以大家习惯性称为VPN代理。
代理
代理(Proxy),也称网络代理,是一种特殊的网络服务,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。一些网关、路由器等网络设备具备网络代理功能。一般认为代理服务有利于保障网络终端的隐私或安全,防止攻击。
- HTTP代理
www对于每一个上网的人都再熟悉不过了,www连接请求就是采用的http协议,所以我们在浏览网页,下载数据(也可采用ftp协议)时就是用http代理。它通常绑定在代理服务器的80、3128、8080等端口上。
socks代理
- 网上资料
- 详情
SOCKS5 是一个代理协议,它在使用TCP/IP协议通讯的前端机器和服务器机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet网中的服务器,或者使通讯更加安全。SOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务器将请求转发给真正的服务器。
- 网上资料
分析
当前需要分析的是基于代理的情况。上面
SOCKS5介绍写的中的介绍的很棒。
简单基于TCP的过程分析
当一个基于TCP协议的客户端希望与目标建立连接,它必须先建立一个与SOCKS服务器上SOCKS端口的TCP连接。通常这个TCP端口是1080(用户可以自定义)
- 当连接建立后,客户端进入协议的“握手(negotiation)”过程:
- 认证方式的选择,
- 根据选中的方式进行认证,
- 然后发送转发的要求。
- SOCKS服务器检查这个要求,根据结果,或建立合适的连接,或拒绝。
0x01当客户端连到服务器后,然后就发送请求来协商版本和认证方法:
+----+----------+----------+
|VER | NMETHODS | METHODS |
+----+----------+----------+
| 1 | 1 | 1 to 255 |
+----+----------+----------+
字段说明:VER:协议生版本号:0x05
NMETHODS: 该字段包含了在METHODS字段中出现的方法标示的数目(以字节为单位)。
METHODS:认证方法1-255.
0x02服务器端从METHODS所给出的方法中选一个,并发送一个方法选中消息(METHOD selection message)给客户端。
+----+--------+
|VER | METHOD |
+----+--------+
| 1 | 1 |
+----+--------+
如果选中的METHOD是0xFF,则表示客户端列出的方法中没有一个方法被接受,客户端必须关闭连接。
目前METHOD定义的值有:
0x00: NO AUTHENTICATION REQUIRED
0x01: GSSAPI
0x02: USERNAME/PASSWORD
0x03—0x7F: IANA ASSIGNED
0x80—0xFE: RESERVED FOR PRIVATE METHODS
0xFF: NO ACCEPTABLE METHODS
0x03然后客户端与服务器端进入认证方法所决定的子协商过程。比如,上面服务器返回给客户端的认证方法为:0x02,则下一步进入用户名和密码的认证过程。
请求过程(Request):
当子协商过程认证完毕,客户端发送详细的请求信息。如果协商的方法中有以完整性检查和/或安全性为目的的封装,这些请求必须按照该方法所定义的方式进行封装。
格式如下:
+----+-----+-------+------+----------+----------+
|VER | CMD | RSV | ATYP | DST.ADDR | DST.PORT |
+----+-----+-------+------+----------+----------+
| 1 | 1 | X'00' | 1 | Variable | 2 |
+----+-----+-------+------+----------+----------+
其中:
VER:protocol version: X’05’
CMD:有以下三种命令
CONNECT X’01’
BIND X’02’
UDP ASSOCIATE X’03’
RSV : 保留
ATYP: 为下列类型的地址
IP V4 address: X’01’,4 字节长度
DOMAINNAME: X’03’,有效的域名指针,以NULL结尾。
IP V6 address: X’04’,16个字节。
DST.ADDR:请的目的地址
DST.PORT:请求的目的地址的端口(网格序)
SOCKS服务器会根据源地址和目的地址来分析请求,然后根据请求类型返回一个或多个应答。
应答过程(Replies):
一旦服务器完成认证协商并建立和SOCK服务器的连接,客户端就发送SOCK请求信息到SOCK服务端。服务器根据请求返回如下格式的信息。
+----+-----+-------+------+----------+----------+
|VER | REP | RSV | ATYP | BND.ADDR | BND.PORT |
+----+-----+-------+------+----------+----------+
| 1 | 1 | X'00' | 1 | Variable | 2 |
+----+-----+-------+------+----------+----------+
其中:
VER:是协议版本号
REP:应答字段,可以是如下值之一:
0x00:成功。
0x01:一般的服务器请求失败。
0x02:规则不允许连接
0x03:网格不可达
0x04:主机不可达
0x05:连接拒绝
0x06:TTL 超时。
0x07:命令不支持。
0x08:地址类型不支持。
0x09—0xff 无定义。
RSV:保留
ATYP:下列地址类型,
IPv4:0x01
DOMAINNAME:0x03
IPv6:0x04
BND.ADDR:服务器绑定的地址.
BND.PORT:服务器网络序端口.
注意:保留字段必须设为0x00.
如果选中的方法中有以完整性检查和/或安全性为目的的封装,这些应答必须按照该方法所定义的方式进行封装.
0x04 CONNECT(连接)
在对一个CONNECT命令的应答中,BND.PORT包含了服务器分配的用来连到目标机的端口号,BND.ADDR则是相应的IP地址。由于SOCKS服务器通常有多个IP,应答中的BND.ADDR常和客户端连到SOCKS服务器的那个IP不同。SOCKS服务器可以利用DST.ADDR和DST.PORT,以及客户端源地址和端口来对一个CONNECT请求进行分析。
0x05 BIND
BIND请求通常被用在那些要求客户端接受来自服务器的连接的协议上。FTP是一个典型的例子。它建立一个从客户端到服务器端的连接来执行命令以及接收状态的报告,而使用另一个从服务器到客户端的连接来接收传输数据的要求(如LS,GET,PUT)。
0x06 应答处理
当一个应答(REP值不等于00)指明出错时,SOCKS服务器必须在发送完应答消息后一小段时间内终止TCP连接。这段时间应该在发现错误后少于10秒。
如果一个应答(REP值等于00)指明成功,并且请求是一个BIND或CONNECT时,客户端就可以开始发送数据了。如果协商的认证方法中有以完整性、认证和/或安全性为目的的封装,这些请求必须按照该方法所定义的方式进行封装。类似的,当以客户机为目的地的数据到达SOCKS服务器时,SOCKS服务器必须用正在使用的方法对这些数据进行封装。