易语言SOCKS5代理例程
-
相关简介:易语言SOCKS5代理例程 .版本 2 .支持库 shellEx .程序集 类模块_代理服务器_TCP_客户 .程序集变量 客户, 客户 .程序集变量 子程序, 子程序指针 .程序集变量 流程, 短整数型 .程序集变量 地址, 文本型 .程序集变量 端口, 整数型 .程序集变量 数据, 字节集 .子程序 _初始化, , , 当基于本类的对象被创建后,此方法会被自动调用 .子程序 _销毁, , , 当基于本类的对象被销毁前,此方法会被自动调用 .子程序 连接, , 公开 .参数 处理子程序, 子程
-
文章来源:股海网作者:股海网发布时间:2017-11-30浏览次数:
易语言SOCKS5代理例程
.版本 2
.支持库 shellEx
.程序集 类模块_代理服务器_TCP_客户
.程序集变量 客户, 客户
.程序集变量 子程序, 子程序指针
.程序集变量 流程, 短整数型
.程序集变量 地址, 文本型
.程序集变量 端口, 整数型
.程序集变量 数据, 字节集
.子程序 _初始化, , , 当基于本类的对象被创建后,此方法会被自动调用
.子程序 _销毁, , , 当基于本类的对象被销毁前,此方法会被自动调用
.子程序 连接, , 公开
.参数 处理子程序, 子程序指针, , 参见本子程序内部的注释部分
.参数 目的服务器地址, 文本型, , 可以为域名或ip地址
.参数 目的服务器端口, 整数型
.如果真 (是否已创建 (SOCKS5代理窗口) = 假)
载入 (SOCKS5代理窗口, , 假)
.如果真结束
复制窗口组件 (SOCKS5代理窗口.TCP_客户, 客户)
客户.标记 = 到文本 (取数组成员数 (代理服务器_TCP_客户) + 1)
地址 = 转换为IP地址 (目的服务器地址)
端口 = 目的服务器端口
客户.连接 (SOCKS5代理窗口.代理地址.内容, 到数值 (SOCKS5代理窗口.代理端口.内容))
子程序 = 处理子程序
流程 = 1
客户.发送数据 ({ 5, 0 })
' 处理子程序 必须有一个文本型参数 参数的第一个文本是各种指令
' 可以使用 取指令标记(参数) 获得,具体指令意义参见下表:
' 0:实际数据 可用 取回数据() 返回实际数据
' 1:未知的连接方式(除无身份验证和用户名/密码方式以外的)
' 2:用户名或密码错误
' 3:连接目标服务器时错误
' 4:连接成功
' 9:连接断开
' 参数的剩余文本表示数组标记
' 可以使用 取指令数组标志(参数) 获得
' 例如 收到 0 指令表示有数据收到可以采用 代理服务器_TCP_客户[取指令数组标志(参数)].取回数据() 返回实际的数据
.子程序 收到数据, , 公开, 此子程序会自动运行,用户不需要更改或调用
.参数 代理服务器的数据, 字节集
.局部变量 数据包, 字节型, , "10"
.判断开始 (流程 = 0)
数据 = 代理服务器的数据
执行子程序 (子程序, “0” + 客户.标记)
.判断 (流程 = 1)
.判断开始 (取字节集右边 (代理服务器的数据, 1) = { 0 })
输出调试文本 (“无身份验证方式”)
客户.发送数据 (返回连接字节集 ())
流程 = 3
.判断 (取字节集右边 (代理服务器的数据, 1) = { 2 })
输出调试文本 (“有密码验证方式”)
客户.发送数据 (取密码连接 ())
流程 = 2
.默认
执行子程序 (子程序, “1” + 客户.标记)
.判断结束
.判断 (流程 = 2)
.如果 (代理服务器的数据 = { 1, 0 })
客户.发送数据 (返回连接字节集 ())
流程 = 3
.否则
执行子程序 (子程序, “2” + 客户.标记)
.如果结束
.判断 (流程 = 3)
.如果 (取字节集中间 (代理服务器的数据, 2, 1) = { 0 })
流程 = 0
执行子程序 (子程序, “4” + 客户.标记)
.否则
执行子程序 (子程序, “3” + 客户.标记)
.如果结束
.默认
.判断结束
.子程序 取回数据, 字节集, 公开
返回 (数据)
.子程序 断开连接, , 公开, 此子程序会自动运行,用户不需要更改或调用
执行子程序 (子程序, “9” + 客户.标记)
.子程序 返回连接字节集, 字节集, , 此子程序会自动运行,用户不需要更改或调用
.局部变量 ip, 文本型, , "4"
.局部变量 数据包, 字节型, , "10"
ip = 分割文本 (地址, “.”, 4)
数据包 [1] = 5 ' 版本号
数据包 [2] = 1 ' 连接模式
数据包 [3] = 0 ' 保留
数据包 [4] = 1 ' ipv4地址类型
数据包 [5] = 到数值 (ip [1]) ' 地址1
数据包 [6] = 到数值 (ip [2]) ' 地址2
数据包 [7] = 到数值 (ip [3]) ' 地址3
数据包 [8] = 到数值 (ip [4]) ' 地址4
数据包 [9] = 端口 \ 256 ' 端口1
数据包 [10] = 端口 % 256 ' 端口2
返回 (到字节集 (数据包))
.子程序 发送数据, 逻辑型, 公开
.参数 数据, 字节集
返回 (客户.发送数据 (数据))
.子程序 作废, , 公开
客户.断开连接 ()
客户.销毁 ()
数据 = { }