你不看协议是不行的。RFC1928c->s
版本1 方法长度1 方法1-255
例:0x050x010x00(无用户认证)
版本对于SOCKS5为0x05
s->c
版本1 方法1
例:0x050x00(无认证)
方法:
00无认证
01 GSS/API
02 用户名/口令
FF 无可选方法,客户机必须关闭连接
下面进行必要的方法子协商(无认证不需要)
c->s
版本1 命令1 保留1 地址类型1 地址(根据类型而变) 端口2
例:0x05 0x01 0x00 0x03 (此类型地址第一个字节是地址长度,后面跟域名,不带字符串结束符) (网络字节序的端口)
命令:
01 CONNECT
02 BIND(用于反向连接)
03 UDP辅助连接
地址类型
01 IPv4 地址长度4
03 域名 地址第一个字节指示域名长度,没有结束符
04 IPv6 地址长度16
s->c
版本1 应答1 保留1 地址类型1 地址(可变) 端口2
应答:
00 成功
其它表示各种类型的失败
地址:
connect 返回用于连接目标的地址和端口
bind 需要双应答 第一个返回新建SOCKET的地址和端口 第二个返回连接者的目标河段口
udp associate 返回新建的UDP SOCKET的地址和端口如果成功,后面就可以象通常一样发送数据了