sock5学习日记
来源:互联网 发布:小米笔记本12.5知乎 编辑:程序博客网 时间:2024/05/17 12:50
sock代理工作原理大致如下:
1。[需要代理方]向服务器发出请求信息;
2。[代理方]应答;
3。[需要代理方]接到应答后发送向[代理方]发送目的ip和端口;
4。[代理方]与目的连接;
5。[代理方]将[需要代理方]发出的信息传到目的方,将目的方发出的信息传到[需要代理方];
6。代理完成。
下面对sock4和sock5的代理工作原理流程分别详细说明,并给出示例代码。
sock4的TCP代理工作流程:
1。我们首先还是连接服务器,然后发送数据给服务器。由于是无用户密码验证,我们需要发送9个字节的数据,展开写为 04 01 + 目标端口(2字节) + 目标IP(4字节) + 00,其中目标端口和目标IP就是我们真正要连接的服务器端口和服务器地址;
2。代理服务器返回8字节的数据,我们只要判断第二字节是否为90即可,若是90连接成功,否则失败.剩下的操作和不存在代理服务器一样,可直接用发送\接受数据。
sock5的TCP代理工作流程:
1。向服务器的代理端口建立tcp连接。一般为1080;
2。向服务器发送 05 02 00 02(此为16进制码,以下同),让代理服务器选择认证方式 ;
05
02 这里确认2种认证方式 无需认证和需要认证,只需要验证一种方式,可以直接发送05 01 00查询服务器是否支持无认证代理方式;
00 不需要认证;
02 需要认证;
3。如果接到 05 00 则是可以代理或则05 02需要认证,这里只需要判断第二字节就行;
如果需要认证,需要向服务器发送01 用户名长度(2字节)用户名 密码长度(2字节)密码,然后接收服务器返回数据,如果第二字节为 00,则认证通过,否则无法认证,则连接失败;
4。发送 05 01 00 01 + 目的地址(4字节)+ 目的端口(2字节),目的地址和端口都是16进制码(不是字符串)。
例202.103.190.27 - 7201
则发送的信息为:05 01 00 01 CA 67 BE 1B 1C 21
(CA=202 67=103 BE=190 1B=27 1C21=7201)
5。接收代理服务器返回的数据,我们只要判断第二字节是否为00即表示代理连接完成;
6。以后操作和直接与目的方进行TCP连接相同。
SOCK5如何用代理UDP连接
1。向服务器的1080端口建立tcp连接
2。向服务器发送 05 01 00
3。如果接到 05 00 则是可以代理
4。发送 05 03 00 01 00 00 00 00 + 本地UDP端口(2字节)
5。服务器返回 05 00 00 01 +服务器地址+端口
7.需要申请方发送
00 00 00 01 +目的地址IP(4字节)+目的端口 +所要发送的信息
8。当有数据报返回时
向需要代理方发出00 00 00 01 +来源地址IP(4字节)+来源端口 +接受的信息
使用sock5代理时TCP数据:
客户端 sock5服务器
SYN
ACKSYN
ACK
05 01 00 00 00 00
05 00 00 00 00 00
05 01 00 03 0E 31 39 32 2E 31 36 38 2E 37 35 2E 31 31 34 00 6E (.....192.168.75.114.n)
05 00 00 01 C0 A8 4D 56 08 D4
ACK
+OK X1 NT-POP3 Server iflytek.com (IMail 8.15 228888-9)..
USER hjma..
+OK send your password..
PASS xxxxxxx..
+OK maildrop locked and ready..
STAT..
+OK 0 0..
QUIT..
+OK POP3 Server saying Good-Bye..
ACKFIN
ACK
ACKFIN
ACK
- sock5学习日记
- SOCK5代理服务器
- sock5代理
- 学习日记
- 学习日记
- 学习日记
- 学习日记
- 学习日记
- 学习日记
- 学习日记
- 【学习日记】
- 学习日记
- 学习日记
- 学习日记
- 学习日记
- 学习日记
- 学习日记
- 学习日记
- CheckBox复选框判断空
- Protocol Buffers编码详解
- 数组的指针控制以及超全局数组的定义和意义
- es5中的数组方法
- 随笔
- sock5学习日记
- 雨轩周记(2017-6-19~2017-6-22)
- C++ Boost Iostreams
- maven配置Oracle 保留参考
- Liferay DXP Soy portlet系列(二) 利用NodeJS,在Soy portlet中使用Chart.js
- Java入门教程之图书管理系统(由简入繁)(十)
- 说大白话之Java抽象类深入理解
- hdu2612
- String与StringBuffer的区别