SOCKS4/SOCKS4A 客户端服务器端协议
1
客户端发送
// SOCKS 4
// +----+----+----+----+----+----+----+----+----+----+....+----+
// | VN | CD | DSTPORT | DSTIP | USERID |NULL|
// +----+----+----+----+----+----+----+----+----+----+....+----+
//# of bytes: 1 1 2 4 variable 1
服务器返回
// +----+----+----+----+----+----+----+----+
// | VN | CD | DSTPORT | DSTIP |
// +----+----+----+----+----+----+----+----+
// # of bytes: 1 1 2 4
//
// VN is the version of the reply code and should be 0. CD is the result
// code with one of the following values:
//
// 90: request granted
// 91: request rejected or failed
// 92: request rejected becasue SOCKS server cannot connect to
// identd on the client
// 93: request rejected because the client program and identd
// report different user-ids
SOCKS5 客户端服务器端协议
1 认服务器选择支持的socks类型
客户端发送
// SOCKS 5
// -------------------------------------------------------------------------------------------
// The client connects to the server, and sends a version identifier/method selection message:
// +----+----------+----------+
// |VER | NMETHODS | METHODS |
// +----+----------+----------+
// | 1 | 1 | 1 to 255 |
// +----+----------+----------+
//
// The values currently defined for METHOD are:
//
// o X'00' NO AUTHENTICATION REQUIRED
// o X'01' GSSAPI
// o X'02' USERNAME/PASSWORD
// o X'03' to X'7F' IANA ASSIGNED
// o X'80' to X'FE' RESERVED FOR PRIVATE METHODS
// o X'FF' NO ACCEPTABLE METHODS
发送协议(版本号(1字节) | 可供选择的认证方法(1字节) | 方法序列(1-255个字节长度))
如果是socks4协议,版本号就是0x04,但是这里是支持UDP的Socks5,所以是字节0x05
Socks协议定义了0-255种通过代理的认证方法:
0x00 无验证需求
0x01 通用安全服务应用程序接口(GSSAPI)
0x02 用户名/密码(USERNAME/PASSWORD)
0x03 至 X'7F' IANA 分配(IANA ASSIGNED)
0x80 至 X'FE' 私人方法保留(RESERVED FOR PRIVATE METHODS)
0xFF 无可接受方法(NO ACCEPTABLE METHODS)
0x05 0x01 0x00 表示只有一种0x00供服务器选择
0x05 0x02 0x00 0x02 表示有两种 0x00 0x02 供服务器选择
服务器端返回
版本号 | 服务器选定的方法
2 发送用户认证消息
客户端发送
0x01|用户名长度(1字节)| 用户名(长度根据用户名长度域指定)| 口令长度(1字节)| 口令(长度由口令长度域指定)
服务器返回
0x01 | 验证结果标志
验证结果标志可以为:0x00 验证通过
3 代理的服务器信息
客户端发送
协议版本 | Socks命令 | 保留字节 | 地址类型 | 特定地址 | 特定端口
Socks命令有3种:CONNECT (编号0x01) BIND (0x02) UDP(编号0x03)
保留字节长度1,为0x00
地址类型有3种:
0X01 该地址是IPv4地址,长4个8bit字节。
0X03 该地址包含一个完全的域名。第一个8bit字节包含了后面名称的8bit的数目,没有中止的’/0’。
0X04 该地址是IPv6地址,长16个8bit字节。
服务器返回
版本 | 代理的应答 | 保留1字节 | 地址类型 | 代理服务器地址 | 绑定的代理端口
代理的应答可以为值:
0X00 成功协商
0X01 常见的Socks故障
0x02 不允许连接
0X03 网络不可到达
0X04 主机不可到达
0X05 连接被重置
0X06 TTL 失效
0X07 命令不支持
0X08 地址类型不支持
0X09 一直到0xff都保留
HTTP客户端服务器端协议
1
客户端发送
1.0
CONNECT www.16gt.com:80 HTTP/1.0/r/n
Authorization: Basic用户:密码/r/n
Proxy-Authorization: Basic用户:密码/r/n
/r/n
1.1
CONNECT www.16gt.com:80 HTTP/1.1/r/n
Host: www.16gt.com:80/r/n
Authorization: Basic 用户:密码/r/n
Proxy-Authorization: Basic 用户:密码/r/n
/r/n
服务器返回
http/