|
分享源码
界面截图: |
|
是否带模块: |
调用了模块 |
备注说明: |
- |
本人小白,上次弄完curl支持库后,想到试试ssh,本来以为很简单,结果翻遍了论坛,
帖子挺多,但是逐一尝试之后,总是有各种问题,主要问题如下:
1. 连接或者执行命令很慢
2. 没有回显结果
3. 不能静态编译
4. 不能内存加载
5. 回显结果异常(有结果但是结果显示不对,仿佛是上次命令返回的结果)
6. 调试正常,编译后闪退
然后还有一些劝退贴,劝说放弃易语言,用C#,python之类的实现,
我倒还真的因为这,去看了C#和python,也捣鼓出了一些东西,但总体还是不甘心,
所以反复翻论坛的帖子,反复尝试,最终弄了一个还可以的支持库出来了
感谢论坛所有大佬相关的帖子,特别是以下两位大佬:
1. 最新libssh2库 例子
这个我真的是花了好长时间研究,几乎完美,
连接和执行命令很快,支持多线程,回显结果正常,可以静态编译内存加载,libssh2.dll也很新,
唯一的问题就是断开连接的时候,程序闪退,这个我解决不了,然后放弃了,希望大佬之后有时间可以修复
因为这个版本集成了较为完整的新版libssh2.dll,后续说不定可以基于这个做密钥登录和文件上传
2. 最新SSH模块,可直接返回结果
这个也是研究学习了好久,大佬封装了模块,连接和执行命令很快,可以静态编译内存加载,libssh2.dll应该是大佬重新编译过的,
运行没有闪退,异常处理的很好,唯一的问题就是回显结果有点问题,我看帖子下面有人反馈这个问题,但是没有回复,
这个我本来是放弃了的,但是其它的都有问题,兜兜转转又回来了,回显结果异常我觉得还是可以处理的,
基于大佬的模块,我做了回显结果的修复模块,写了一个支持多线程的例子,可以做到连续发送命令显示结果,
这里用了模块反编译工具,如果管理和大佬觉得不妥,可以联系我修改,希望大佬可以尽快修复这个问题
简单说明一下我修复libssh2.ec的地方:
|
SSH2客户Duan_发送命令 | 文本型 | | |
session | 整数型 | | | | command | 文本型 | | | | error | 整数型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | 响应结果 | 文本型 | | | 响应结果地址 | 整数型 | | | 响应结果长度 | 整数型 | | | 空白文本 | 文本型 | | |
error = 匿名程序集变量_1. 调用函数 (“ssh_channel_exec”, session, 取地址_文本型 (command ), 取指针地址_整数型 (响应结果地址 ), 取指针地址_整数型 (响应结果长度 )) 如果真 (响应结果长度 > 0 )响应结果 = 到文本 (编码转换 (指针到字节集 (响应结果地址, 响应结果长度 ), #编码_UTF_8, #编码_GB2312, ))
空白文本 = 取空白文本 (响应结果长度 )写到内存 (到字节集 (空白文本 ), 响应结果地址, 响应结果长度 )响应结果 = 删尾空 (响应结果 ) 响应结果长度 = 取文本长度 (响应结果 )响应结果 = 子文本替换 (取文本左边 (响应结果, 响应结果长度 ), 字符 (10 ), 字符 (13 ) + 字符 (10 ), , , 真)返回 (响应结果 )
这是我写的ssh连接linux的demo代码:
窗口程序集名 | 保 留 | 保 留 | 备 注 | 窗口程序集_启动窗口 | | | | 变量名 | 类 型 | 数组 | 备 注 | session | 整数型 | | 状态 | 整数型 | | 线程池 | 鱼刺类_线程池 | | 临界区 | 鱼刺类_临界许可 | | 连接成功 | 逻辑型 | | 命令序号 | 整数型 | |
线程池. 创建 (, , , )按钮连接.禁止 = 假 按钮断开.禁止 = 真 连接成功 = 假 命令序号 = 1 状态 = SSH2客户Duan_初始化 ()调试输出 (状态 )变量名 | 类 型 | 静态 | 数组 | 备 注 | 地址 | 文本型 | | | 端口 | 文本型 | | | 用户 | 文本型 | | | 密码 | 文本型 | | |
地址 = 编辑框主机.内容 端口 = 编辑框端口.内容 用户 = 编辑框用户.内容 密码 = 编辑框密码.内容 session = SSH2客户Duan_连接 (地址, 到整数 (端口 ), 用户, 密码, , )如果 (session > 0 )编辑框日志. 加入文本 (“***连接服务器成功***” + #换行符 ) 编辑框主机.禁止 = 真 编辑框端口.禁止 = 真 编辑框用户.禁止 = 真 编辑框密码.禁止 = 真 按钮连接.禁止 = 真 按钮断开.禁止 = 假 连接成功 = 真 编辑框日志. 加入文本 (“***连接服务器失败***” + #换行符 )连接成功 = 假 编辑框日志.加入文本 (“*************************” + #换行符 )SSH2客户Duan_断开 (session, )编辑框日志. 加入文本 (“*****断开服务器*****” + #换行符 )编辑框主机.禁止 = 假 编辑框端口.禁止 = 假 编辑框用户.禁止 = 假 编辑框密码.禁止 = 假 按钮连接.禁止 = 假 按钮断开.禁止 = 真 如果真 (连接成功 )SSH2客户Duan_销毁 ()如果真 (连接成功 = 假)信息框 (“请先连接服务器”, 0, “提示”, )返回 () 如果 (线程池. 投递任务 (&send, , ) = 假)调试输出 (“创建任务失败”)调试输出 (“创建任务成功”)如果真 (连接成功 = 假)信息框 (“请先连接服务器”, 0, “提示”, )返回 () 如果 (线程池. 投递任务 (&sendMulti, , ) = 假)调试输出 (“创建任务失败”)调试输出 (“创建任务成功”)变量名 | 类 型 | 静态 | 数组 | 备 注 | 执行命令 | 文本型 | | | 响应结果 | 文本型 | | |
执行命令 = 编辑框命令.内容 sendSingle (执行命令 )sendSingle (“uptime”)sendSingle (“ls”)sendSingle (“ls -l”)sendSingle (“pwd”)临界区. 进入 ()编辑框日志. 加入文本 (“序号:” + 到文本 (命令序号 ) + #换行符 )编辑框日志. 加入文本 (“*执行命令:” + 执行命令 + #换行符 )响应结果 = SSH2客户Duan_发送命令 (session, 执行命令, )调试输出 (响应结果 )编辑框日志. 加入文本 (“*响应结果:” + #换行符 )编辑框日志. 加入文本 (响应结果 )编辑框日志. 加入文本 (“*************************” + #换行符 )命令序号 = 命令序号 + 1 临界区. 退出 ()
有相关问题,请联系我,大家共同学习进步~
最后附上我修复的模块和程序源码(包含依赖模块)
ssh连接linux支持多线程静态编译内存加载回显命令结果正常.zip
(243.37 KB, 下载次数: 427)
|
-
评分
-
查看全部评分
|