工具开发初衷:公司搬迁,相同的网络设备和网络布局,在原办公场所使用正常。到了新办公场所,经常会出现断网几分钟,然后又自动连接的情况。联系了电信师傅过来检测,也没有检测出问题。说有可能是我们内部网络的原因。
为了判断是内网,还是外网的问题,刚开始是开了2个CMD,分别ping 外网网关和内网网关,但不太方便。所以使用易语言写了这ping工具,当连续 ping 4次 不通时,则判定为断网,进行截图。
最后将断网截图反馈给电信,电信根据断网时间,排查出可能是由于天气太热,机房里有一台设备温度过高导致的间歇性断网。本次反馈后,后续基本就没有在上班时间出现断网的情况了。
.版本 2 .支持库 spec .程序集 窗口程序集_启动窗口 .程序集变量 线程ID1, 整数型 .程序集变量 线程ID2, 整数型 .程序集变量 超时计数1, 整数型 .程序集变量 超时计数2, 整数型 .程序集变量 停止, 逻辑型 .程序集变量 线程ID3, 整数型 .程序集变量 断网计次, 整数型 .子程序 _开始按钮_被单击 开始按钮.禁止 = 真 停止按钮.禁止 = 假 断网计次 = 0 SC1编辑框.内容 = “” SC2编辑框.内容 = “” .如果 (IP1选择框.选中 = 真 或 IP2选择框.选中 = 真) 线程_启动 (&ping1, , 线程ID1) 线程_启动 (&ping2, , 线程ID2) 线程_启动 (&断网截图保存, , 线程ID3) .否则 My调试输出 (SC1编辑框, “勾选需要检测的地址”) .如果结束 .子程序 ping1 .局部变量 地址1, 文本型 地址1 = IP1编辑框.内容 .如果真 (IP1选择框.选中 = 真) .如果 (地址1 ≠ “”) 系统_取DOS执行结果 (“ping ” + 地址1, &回调信息1) 程序_延时 (500) 系统_取DOS执行结果 (“ping ” + 地址1 + “ -t -l 1”, &回调信息1) .否则 My调试输出 (SC1编辑框, “检测地址不能为空”) .如果结束 .如果真结束 .子程序 ping2 .局部变量 地址2, 文本型 地址2 = IP2编辑框.内容 .如果真 (IP2选择框.选中 = 真) .如果 (地址2 ≠ “”) 系统_取DOS执行结果 (“ping ” + 地址2, &回调信息2) 程序_延时 (500) 系统_取DOS执行结果 (“ping ” + 地址2 + “ -t -l 1”, &回调信息2) .否则 My调试输出 (SC2编辑框, “检测地址不能为空”) .如果结束 .如果真结束 .子程序 回调信息1, 逻辑型 .参数 回显信息, 文本型 调试输出 (回显信息) .如果真 (寻找文本 (回显信息, “超时”, , 假) ≠ -1) 超时计数1 = 超时计数1 + 1 .如果真结束 ' 当连上网时,超时计数置0 .如果真 (寻找文本 (回显信息, “超时”, , 假) = -1) 超时计数1 = 0 .如果真结束 My调试输出 (SC1编辑框, 回显信息, 假) 返回 (假) .子程序 回调信息2, 逻辑型 .参数 回显信息, 文本型 调试输出 (回显信息) .如果真 (寻找文本 (回显信息, “超时”, , 假) ≠ -1) 超时计数2 = 超时计数2 + 1 .如果真结束 .如果真 (寻找文本 (回显信息, “超时”, , 假) = -1) 超时计数2 = 0 .如果真结束 My调试输出 (SC2编辑框, 回显信息, 假) 返回 (假) .子程序 _停止按钮_被单击 线程_销毁 (线程ID1) 线程_销毁 (线程ID2) 线程_销毁 (线程ID3) .如果真 (进程_终止进程 (“cmd.exe”) = 真) 延迟 (100) My调试输出 (SC1编辑框, “已停止”) .如果真结束 停止 = 真 .如果真 (写日志选择框.选中 = 真) 程序_写日志 (SC1编辑框.内容, 取运行目录 () + “\运行日志1.txt”) 程序_写日志 (SC2编辑框.内容, 取运行目录 () + “\运行日志2.txt”) .如果真结束 开始按钮.禁止 = 假 停止按钮.禁止 = 真 .子程序 __启动窗口_创建完毕 批量_编辑框_读取配置 (_启动窗口, 取运行目录 () + “\Config.ini”) 批量_选择框_读取配置 (_启动窗口, 取运行目录 () + “\Config.ini”) 停止 = 假 .子程序 __启动窗口_将被销毁 _停止按钮_被单击 () 批量_编辑框_保存配置 (_启动窗口, 取运行目录 () + “\Config.ini”, “SC1编辑框|SC2编辑框”) 批量_选择框_保存配置 (_启动窗口, 取运行目录 () + “\Config.ini”, ) .子程序 断网截图保存 .局部变量 当前时间, 日期时间型 .局部变量 断网截图, 字节集 .局部变量 保存路径, 文本型 .判断循环首 (真) .如果真 (超时计数1 > 3 或 超时计数2 > 3) 程序_延时 (5000) 当前时间 = 取现行时间 () 调试输出 (当前时间) ' 截图 断网截图 = 图片_后台截图 (_启动窗口.取窗口句柄 ()) ' 设置截图保存路径 保存路径 = 取运行目录 () + “\断网截图\” + 到文本 (取年份 (当前时间)) + “年\” + 到文本 (取月份 (当前时间)) + “月” + 到文本 (取日 (当前时间)) + “日\” ' 文件目录不存在则创建目录 .如果真 (目录_是否存在 (保存路径) = 假) 调试输出 (“文件目录不存在,创建目录”) 文件_创建文件目录 (保存路径) .如果真结束 ' 保存截图 写到文件 (保存路径 + 时间_到文本 (当前时间, 0, 3) + “.jpg”, 断网截图) 断网计次 = 断网计次 + 1 ' 保存截图后,延时10秒后重新开始 程序_延时 (10000) ' 重置超时计数 超时计数1 = 0 超时计数2 = 0 ' 截图后重新开始 线程_销毁 (线程ID1) 线程_销毁 (线程ID2) .如果真 (进程_终止进程 (“cmd.exe”) = 真) 延迟 (100) .如果真结束 .如果 (IP1选择框.选中 = 真 或 IP2选择框.选中 = 真) 线程_启动 (&ping1, , 线程ID1) 线程_启动 (&ping2, , 线程ID2) .否则 My调试输出 (SC1编辑框, “勾选需要检测的地址”) .如果结束 .如果真结束 .如果真 (断网计次 ≥ 20) My调试输出 (SC1编辑框, “断网已达20次,停止断网检测”) _停止按钮_被单击 () .如果真结束 .如果真 (停止) 跳出循环 () .如果真结束 程序_延时 (1000) .判断循环尾 () .子程序 My调试输出, , 公开, 自定义编辑框 .参数 输出编辑框, 编辑框 .参数 内容, 文本型 .参数 空行显示, 逻辑型, 可空, 是否多空一行显示输出内容,默认为真 .参数 显示时间, 逻辑型, 可空, 在输出时,是否显示时间,默认为真 .参数 网络时间, 逻辑型, 可空, 显示京东服务器时间,默认为假 .局部变量 现行时间, 文本型 .局部变量 URL, 文本型 .局部变量 执行返回, 字节集 .局部变量 返回结果, 文本型 .局部变量 currentTime, 文本型 .局部变量 time, 文本型, , "0" ' 判断显示时间是否为空,空则真 .如果真 (是否为空 (显示时间)) 显示时间 = 真 .如果真结束 ' 判断空行显示是否为空,空则真 .如果真 (是否为空 (空行显示)) 空行显示 = 真 .如果真结束 ' 判断网络时间是否为空,空则假 .如果真 (是否为空 (网络时间)) 网络时间 = 假 .如果真结束 .如果 (网络时间 = 真) ' 获取京东服务器时间 URL = “https://api.m.jd.com/client.action?functionId=queryMaterialProducts&client=wh5” 执行返回 = 网页_访问_对象 (URL) 返回结果 = 到文本 (编码_编码转换对象 (执行返回)) currentTime = Json_GetText (返回结果, “currentTime”) ' 调试输出 (currentTime) 文本_分割文本 (currentTime, “ ”, , time) 现行时间 = “【” + time [2] + “】” .否则 ' 取本地时间 现行时间 = “【” + 时间_到文本 (, 1, 3) + “】” .如果结束 ' 判断是否输出操作时间 .如果 (显示时间 = 真) .否则 .如果结束 ' 判断是否多空一行显示 .如果 (空行显示 = 真) 输出编辑框.加入文本 (现行时间 + 内容 + #换行符 + #换行符) .否则 输出编辑框.加入文本 (现行时间 + 内容 + #换行符) .如果结束 .如果 (空行显示 = 真) 输出编辑框.加入文本 (内容 + #换行符 + #换行符) .否则 输出编辑框.加入文本 (内容 + #换行符) .如果结束 .子程序 Json_GetText, 文本型, 公开, 只支持一层的JSON提取。 .参数 Str, 文本型, , 原文本 .参数 Name, 文本型, , 要取的名称,如:{"a":"123"},要取123则为a .参数 值的结尾字符, 文本型, 可空, 可空,默认为引号。如:{"a":"123"},结尾符为引号,又如:{"count":258},结尾符为} .如果真 (是否为空 (值的结尾字符) 或 删首尾空 (值的结尾字符) = “”) 值的结尾字符 = #引号 .如果真结束 返回 (String_GetSubstr (Str, #引号 + “Name” + #引号 + “:”, 值的结尾字符)) .子程序 String_GetSubstr, 文本型, 公开, 比如:欲取全文本为“12345”,现在要取出“3”,<3>的前面为“2”,<3>的后面为“4”, .参数 欲取全文本, 文本型, , 比如:欲取全文本为 12345 .参数 前面文本, 文本型, , 3的前面为“2”,引号直接用 #引号,如:"<font color=#引号red#引号>" .参数 后面文本, 文本型, , 3的后面为“4”,引号直接用 #引号,如:"<font color=#引号red#引号>" .参数 起始搜寻位置, 整数型, 可空, 可空。1为首位置,2为第2个位置,如此类推,如果被省略,则“寻找字节集”命令默认从首部开始,“倒找字节集”命令默认从尾部开始。 .参数 是否区分大小写, 逻辑型, 可空, 可空。初始值为“假”。假 = 不区分 真 = 区分大小写。 .局部变量 局_位置, 整数型 .局部变量 局_位置1, 整数型 .局部变量 局_前面文本, 文本型 .局部变量 局_后面文本, 文本型 局_前面文本 = 子文本替换 (前面文本, “#引号”, #引号, , , 真) 局_后面文本 = 子文本替换 (后面文本, “#引号”, #引号, , , 真) 是否区分大小写 = 取反 (是否区分大小写) 局_位置 = 寻找文本 (欲取全文本, 局_前面文本, 起始搜寻位置, 是否区分大小写) .如果真 (局_位置 ≠ -1) 局_位置 = 局_位置 + 取文本长度 (局_前面文本) .如果真结束 局_位置1 = 寻找文本 (欲取全文本, 局_后面文本, 局_位置, 是否区分大小写) .如果真 (局_位置 = -1 或 局_位置1 = -1) 返回 (“”) .如果真结束 返回 (取文本中间 (欲取全文本, 局_位置, 局_位置1 - 局_位置))
1 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
2 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
3 本站资源大多存储在云盘,如发现链接失效,请联系我们第一时间更新。联系青禾站长
我要发表心灵,而不公开隐私