紫猫插件-网络共享数据(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)

原文地址:https://www.cnblogs.com/zjl8455482/p/10226015.html

时间: 2024-10-03 14:57:52

紫猫插件-网络共享数据(16-18)的相关文章

紫猫插件-文件读写(1-13)

QM[zm]05.01 文件读写之读取乱码文件(VIP) 小知识:了解下base64编码(功能就目前而言只是让内容无法直接读取 还有一个常用用处是可以把图片的二进制流base64编码 把图片作为字符串来传输 实际上稍微懂一点这方面的知识的很容易看到真实的内容) 举个例子 比如迅雷下载地址 我们把第一行的字符串进行base64解码 得到的结果是 很明显 迅雷对下载地址进行了保护 算法无非就是 给真正的下载地址左侧加AA右侧加ZZ 然后整体bse64加密 得到了我们看到的迅雷下载地址 顺便说一下 我

简易中控紫猫插件版(1)

中控思路基本都是从紫猫老师的教程里面获取到的 脚本代码大部分也是紫猫的  紫猫老师也提供了一个控制后台 不过是在脚本端的  而且暂时只能查看 无法直接修改 索性我就用php写了3个简单网页来作为控制后台 中控的核心思路:实现脚本和中控定期的交互 把脚本的信息上传给中控 中控把对应的内容反馈给脚本 然后脚本根据这些反馈做出对应的操作.紫猫插件的作用是 让我们无需深入研究网页编程就可以实现脚本和中控的交互 至于其他的东西还是需要我们自己来写 当前中控实现的功能 1.用户可以通过脚本注册账号 并可以修

简易中控紫猫插件版(2)基本思路介绍

整体的运行思路: 中控端:其实就是紫猫插件自带的那个sql.php 和对应的mysql数据库表 功能是和脚本主代码进行交互  目前这情况下是接收脚本主代码传递过来的信息(云账号和当前脚本状态) 并把脚本状态存储到中控对应的云日志表里,根据云账号去云用户表里面查询出对应的密码 再根据云账号去云配置表里面查询出对应的配置内容 然后把 对应的密码和对应的配置返回给脚本主代码 脚本主代码:只是负责和中控交互和根据中控指令开关脚本多线程 把从脚本多线程获取的脚本状态和云账号发送给中控端,中控处理完毕后返回

简易中控紫猫插件版(3)压缩包使用说明

1.环境配置 脚本运行环境:没什么说的 正常的最新版手机按键 当然还需要 最新的紫猫插件 中控运行环境:首先要保证把压缩包的所有php文件都扔到网站的根目录下 必须保证网站的php版本是5.4+ 不然紫猫插件的php框架会出问题 然后你要知道网站数据库的账号和密码,和要用到的数据库名(自己随便起名 比如test之类的),在网站根目录下找到dbcon.php文件 用写字板就可以打开 第一行基本不用动 第二行是数据库的账号 第三行是数据库密码 第四行是数据库名  把你刚刚知道的数据库信息写入里面 如

[lua]紫猫lua教程-命令宝典-L1-01-01. Lua环境与IDE

网上大把的lua教程  不过紫猫老师的教程向来都是讲的非常仔细 所以最近天气已经36+了 魔兽世界还需要冲飞行声望  懒得写单子根本没有单子,正好认认真真的看下紫猫老师的lua教程 紫猫老师的lua教程的目的性相当明确就是让人能够独立的编写按键的lua插件  并且公布了紫猫插件的以前版本的源码  这一点对于我而言都是一个惊喜  可从紫猫老师的源码里面学到很多东西 顺路帮紫猫老师打个广告  不过紫猫老师的教程过于细致 什么都讲到了 视频量一直都很大  入学咨询QQ:345911220 紫猫学院官网

多租户实现之基于Mybatis,Mycat的共享数据库,共享数据架构

前言 SaaS模式是什么? 传统的软件模式是在开发出软件产品后,需要去客户现场进行实施,通常部署在局域网,这样开发.部署及维护的成本都是比较高的. 现在随着云服务技术的蓬勃发展,就出现了SaaS模式. 所谓SaaS模式即是把产品部署在云服务器上,从前的客户变成了"租户",我们按照功能和租用时间对租户进行收费. 这样的好处是,用户可以按自己的需求来购买功能和时间,同时自己不需要维护服务器,而我们作为SaaS提供商也免去了跑到客户现场实施的麻烦,运维的风险则主要由IaaS提供商来承担. S

78.PL和PS通过BRAM交互共享数据

本篇文章目的是使用Block Memory进行PS和PL的数据交互或者数据共享,通过zynq PS端的Master GP0端口向BRAM写数据,然后再通过PS端的Mater GP1把数据读出来,将结果打印输出到串口终端显示. 涉及到AXI BRAM Controller 和 Block Memery Generator等IP的使用. 本系列文章尽可能的让每一个实验都相对独立,过程尽可能保证完整性,保证实验的可重现性. 但是用到的模块或者IP的具体作用和用法不保证都重复详细的介绍. 本文所使用的开

网络遥控器数据统计0526

一.统计脚本及代码 1 #!/bin/sh 2 3 root_dir=`pwd` 4 source_file="$root_dir"/operate0526.txt 5 single_file="$root_dir"/single0526.txt 6 result_file="$root_dir"/result.txt 7 8 rm -rf $single_file 9 rm -rf $result_file 10 11 ###统计出现次数最多的

iOS开发网络篇—数据缓存

iOS开发网络篇—数据缓存 一.关于同一个URL的多次请求 有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的. 上面的情况会造成以下问题 (1)用户流量的浪费 (2)程序响应速度不够快 解决上面的问题,一般考虑对数据进行缓存. 二.缓存 为了提高程序的响应速度,可以考虑使用缓存(内存缓存\硬盘缓存) 第一次请求数据时,内存缓存中没有数据,硬盘缓存中没有数据. 缓存数据的过程 当服务器返回数据时,需要做以下步骤 (1)使用服务器