紫猫插件-网络共享数据(16-18)
Posted zjl8455482
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了紫猫插件-网络共享数据(16-18)相关的知识,希望对你有一定的参考价值。
QM[zm]04.16 网络共享数据之数据库权限(VIP)
小知识:简单的限制同名设备登陆功能 实现思路
每次某个设备登陆 就把登陆设备的设备Id上传接口 接口在数据库里面查找对应的设备 找到字段是否已运行为1 当该设备脚本停止 就给接口传送一个信息 让该字段为-1 但是这会涉及到接口的功能设计和php代码的管理 如果有相同设备id的设备想要运行脚本 先到接口的数据库搜索是否已运行字段的值 如果为1 表明已经有该设备运行 自然会阻止重名设备运转 如果没有设备运行 则允许运行后 把字段 已运行字段 的值改为1 给自己接口上增加这个功能(这个思路其实不用看了 因为下一节有老师的思路和完整的代码)
注意:如果网站挂在外网 需要调整几点 因为要考虑安全因素了
1.数据库的名字test 这个数据库名并不安全 请自己重想一个数据库名 并在sql.php里面修改成对应的名字
2 对于数据库的账号 不要用root账号 风险过大 可以在后台设置一个普通用户 给与一定的基础权限就够了 具体设置方法 可以百度 没什么太多需要说的 一个具体的链接可以参考https://jingyan.baidu.com/article/fa4125acb2fd8d28ad709245.html
3 注意 选择 任意主机和本地的时候 注意区别
4 注意真正的密码是这个 而不是我们输入的密码
QM[zm]04.17 网络共享数据之脚本授权加密验证(VIP)
以前的老问题:老师这节课提到了 中控系统的一个最要紧的东西 如果脚本是非正常的停止 没有给接口发送终止的命令 接口数据库自然没有记录该脚本已经停止 这就需要接口数据库定时执行一个数据库遍历任务 查看所有的记录里面所记录的最新时间和当前时间对比 超过2分钟的就会认定已经下线 。如果是普通的虚拟主机 因为没法进入服务器端 更没法用at命令来设置定时任务 所以无法实现这个定时操作 还有其他的投机取巧的办法 以前博客也有阐述 但是依然无法实现
老师提出了一个解决办法 虽然不是十分完美 但是的确是解决了 下面就是思路
老师提出用随机字符串来验证的思路也不错
目的:我们要实现一个设备号当前只有一个可以登陆的
思路结构(主要是数据库表的结构和运行思路):(不过会顶号)
举个例子:设备id YTYUTU34234GSj 这个设备 上的脚本运行 产生了一个随机数之为987324 然后把这个随机数值送到数据接口上传到接口数据库记录 记录的样式
id 1 | 设备id YTYUTU34234GSj | 设备验证码 :987324 | 最新更新时间 :2019-01-05 17:23 (应该是时间戳)
如果此时我又开了一个设备 把该设备的设备id也设置为YTYUTU34234GSj 运行第二个设备的脚本 也会产生一个随机值 但是 基本不可能跟第一个设备的随机数一样 打个比方为945832 把这个数据提交到接口 接口数据库接收了 该设备id对应的记录改为了
id 1 | 设备id YTYUTU34234GSj | 设备验证码 :945832 | 最新更新时间 :2019-01-05 17:30 (应该是时间戳)
当第一个设备周期性的验证接口数据库当前设备id对应的验证码的时候 接口数据库的验证码现在为945832 而不是第一个设备的987324 那么第一个设备会自己停止运行脚本并提示发生设备id冲突 如果存在第三个设备 该设备id也为YTYUTU34234GSj 那么会导致第二个设备也会停止
数据库结构:
源码:
Import "zm.luae" //导入插件,只需执行一次 zm.Init //初始化插件,只需执行一次 Randomize Dim 显示字符串="" Dim 当前验证字符串=随机数字字母字符串(array(0,15)) //Dim 设备id=GetDeviceID() Dim 设备id="1234567890" //因为就算用模拟器复制一个镜像 设备id还是有区别 所以我就指定下设备id让他们相同 TracePrint "生成的 当前验证字符串["&当前验证字符串&"]" Dim 网络数据库接口地址="http://192.168.0.102/sql.php" zm.NetDataInit 网络数据库接口地址, "测试数据库" zm.NetDataSet 设备id, 当前验证字符串 //把当前的设备id和当前设备对应的随机验证字符串上传给接口数据库记录到其中 //设置几个线程需要用到的变量 因为线程和主代码之间很多东西无法通用 Thread.SetShareVar "多线程设备id", 设备id Thread.SetShareVar "多线程当前验证字符串", 当前验证字符串 Thread.SetShareVar "多线程是否运行","1" Thread.Start 多线程_设备网络验证 //运行多线程 线程负责链接接口数据库检测当前设备id对应的验证字符串和脚本本身的验证字符串是否一致 //主循环代码 Do //若干操作 If Thread.GetShareVar("多线程是否运行") <> "1" Then For 5 ShowMessage "主代码<发生设备冲突 当前脚本停止>" Delay 2000 Next EndScript //主代码停止 Else ShowMessage "主代码[本次检测一切正常 允许当前设备运行脚本]" Delay 1000 End If Delay 20000 Loop Sub 多线程_设备网络验证() Dim 网络数据库接口地址="http://192.168.0.102/sql.php" zm.NetDataInit 网络数据库接口地址, "测试数据库" Dim 网络上获取的当前验证字符串=zm.NetDataGet(Thread.GetShareVar("多线程设备id")) TracePrint "网络上获取的 多线程当前验证字符串为["&网络上获取的当前验证字符串&"]" Do //链接接口数据库 把当前设备id提交获取数据库里面记录的验证字符串 然后和本地的验证字符串比较 网络上获取的当前验证字符串=zm.NetDataGet(Thread.GetShareVar("多线程设备id")) If 网络上获取的当前验证字符串 <> Thread.GetShareVar("多线程当前验证字符串") Then Thread.SetShareVar "多线程是否运行", "-1" //将该线程值变为-1 通知主代码停止 TracePrint "多线程内发现网络验证字符串和本地的验证字符串不同 多线程停止" EndScript //线程停止 Else ShowMessage "多线程[一切正常]" End If Delay 10000 //10秒检测一次 Loop End Sub //下面是随机生成指定长度字符串的函数 和主代码无关 Function 随机数字字母字符串(配置数组或者长度数值) Dim arr,str,result If IsArray(配置数组或者长度数值) Then If 配置数组或者长度数值(0) = 0 Then str="a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z-1-2-3-4-5-6-7-8-9-0" arr = Split(str, "-") ElseIf 配置数组或者长度数值(0) = 1 Then str="1-2-3-4-5-6-7-8-9-0" arr = Split(str, "-") ElseIf 配置数组或者长度数值(0) = 2 Then str="a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z" arr = Split(str, "-") End If Else str="a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z-1-2-3-4-5-6-7-8-9-0" arr = Split(str, "-") End If //35个字符 For cint(配置数组或者长度数值(1)) result=result&arr(cint(随机数(0,ubound(arr)))) Delay 10 Next TracePrint "得到的随机字符串为: " & result 随机数字字母字符串=result End Function Function 随机数(最小值,最大值) Dim 结果 结果 = Int((最大值 - 最小值 + 1) * Rnd() + 最小值) 随机数=结果 End Function
QM[zm]04.18 网络共享数据之一些更新内容(VIP)
1.sql导入导出
txt导入mysql
鉴于手机脚本用的比较多的是txt来存储一些重要的账号密码信息 所以这里演示下如何把txt里面的账号密码信息传递到数据库里面 老师的办法可行 但是效率有点低
常见的txt账号文件结构如下
打开mysql后台 先新建表 加2个字段 txt里面有几列我们就加入几个字段
开始导入txt
设置导入参数
分隔符设置 因为txt里面分隔符为- 所以我们导入要设置
结果
可以给当前表再添加一些需要的字段 比如id自增 或者是其他字段 这样就完成了txt导入mysql
mysql导出为txt
设置导出参数
得到结果
2.获取最大行数
结果 = zm.NetDataCount([数据表名]) 没什么说的 无非就是 select count(*) from XXX
3起始行限定
不用多说
4接口数据库内容写入表(效率存在问题 不建议用这个办法 可以直接txt导入mysql)
以上是关于紫猫插件-网络共享数据(16-18)的主要内容,如果未能解决你的问题,请参考以下文章