填坑日志-云网络智慧课堂双网卡Mac地址读取错误的问题及解决
云网络智慧课堂的双网卡问题记录及解决方案
教师端
其实这里双网卡的问题一直没有解决,分为了两部分,一部分是教师端,一部分是学生端。症状类似,问题也类似,都是在设计之初因为硬件限制可能没有考虑到双网卡的可能。稍微看了下代码,可能是后续发生了问题考虑了,但是没有详细地思考如何去处理这部分的代码,导致了这里仍然很多遗留问题却没有留下TODO。我在这里修改了这部分代码。
先说流程,这部分代码流程大致如下:
1.从数据库中抓取当前服务端中当前已经记录下来的教师端的mac地址,每个mac地址已"*"分开生成一个List 。
2.获取当前本地所有的网络设备的mac地址,如果有多个状态为 up 的网络设备,则会将这部分网络设备的mac地址用|组装成一个字符串,如果只有一个设备,那么只会有一个mac地址。
3.将获取到的List 中的每个成员和2中获得的字符串比对。如果List中有这个字符串,则通过;如果List中没有这个字符串,则检查是否超限,如果超限则返回通知授权点数不足,如果未超限则将这串字符串写入数据库内。
聪明的你看到这里应该已经想到了,在这里并没有做相应的处理,而是直接将两张网卡的地址简单粗暴地塞进了数据库内。这样做的优点是可以防止用户作弊,一定要指定的网卡配上指定的机器使用才可以正确激活教师机。缺点是灵活性非常差,一台设备插上另外一张网卡那么这个设备就将直接被弃用。这是非常不合理的。
为此我重构了第3部分代码,在这里我简单叙述一下修改逻辑。
简单的来说我们给mac地址可能的情况分类,首先我们这里就不考虑当前的mac地址组字符串和List中的某个元素完全相等、mac地址组字符串和List中某个元素完全不同(所谓完全不同指的是List中任意元素和本地的mac地址组中的任意一个mac地址都不相同的情况,就是完全不同的设备配上完全不同的网卡的情况,这种情况是out的),这两者之中前者应该是理所应当的通过,后者是理所应当的不通过。
那么考虑中间的情况:
1.服务器上记录了单网卡,但本地插了双网卡。即服务器上的List只记录了本地一个mac地址,而本地却是两个mac地址组装成的mac地址组。这种情况需要通过审核,因为可能是教师插了一张新的无线网卡或者是就是要一张网卡上网一张网卡连接本地,集成网卡也是网卡。
2.服务器上记录了双网卡,但本地只插了一张网卡。即可能初始化的时候插了两个网卡,记录在List上对应的元素是一个mac地址的双网卡组合字符串,但是后续使用中可能是网卡坏了或者别的地方要用拔走了,这种情况应该也是要允许的。
3.服务器上记录了双网卡,本地也插了双网卡,但是独立网卡的mac地址不同。即可能在后续的使用中更换了无线网卡,或者是换了性能更好的独立网卡。这我们应该也是要允许用户这么操作的。
那么双网卡的问题就解决了....吗?
并不,比如二三情况组合一下我们不难猜想到,如果服务器上记录了双网卡,但本地只插了一张网卡也可以用,那这种情况用户就可以作弊了!初始化的时候插两张甚至三张网卡,然后拿这些网卡去插到别的设备上去,原本并不合法的设备此时就变得合法了(虽然我们的产品大概率是不会遇到懂这些的人,但是本着对产品负责的态度..)。
于是在2、3情况下,我们的解决方法是:用后续的情况去替换之前留在服务器上的mac地址。
比如我们服务器上记录了这台设备的双网卡,现在如果用单网卡去验证的话,那就要把之前的双网卡状态清除掉,用现在这个单网卡去替换原先的mac地址,自己跟着这个思路想想,不难算出这是能保证实际上的设备运行数量的。
这个问题姑且算解决了,但是只是面对双网卡的情况。之后如果面对更多的网卡可以尝试将集成网卡设定为唯一指定mac地址来源,我这里就不做尝试了。
学生端
学生端的问题其实类似,也是一个mac地址认证的问题。
具体参考QtResource文件夹下libNetmessage.dll文件中CheckMacAddress函数,我这里就不再赘述了
填坑日志-云网络智慧课堂双网卡Mac地址读取错误的问题及解决的更多相关文章
- 网络基本概念备忘:MAC地址,端口,HTTP状态码
MAC地址 英文MAC Address 英文全称: Media Access Control Address 别称:硬件位址 用途:定义网络设备位置 表示:十六进制数,6 Byte 特点:产品出产后M ...
- Android 获得本地IP地址、外网IP地址、本设备网络状态信息、本地Mac地址
本地内网IP和外网IP的区别: 根据我的经验一台电脑需要两个ip才可以上网,一个是本地的内网ip 一个是外网的ip 本地的ip 一般是192.168.1.2这种样子 只要在不同的路由器上可以重复 外 ...
- CAN网络上新增加的设备与网络上已有设备MAC地址冲突的软件解决方案
已知 1号的CAN节点的地址是0x1f 2号的CAN 节点的地址是0x1f 要达到的要求是 假设 网络上 CAN1 节点已经工作了,我现在需要在网络上接入CAN2节点. 那么CAN2节点首次上电的时候 ...
- 填坑...P1546 最短网络 Agri-Net
P1546 最短网络 Agri-Net 难度普及/提高- 时空限制1s / 128MB 题目背景 农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场.当然,他需要 ...
- 解决Ubuntu Server 12.04换了网卡MAC地址后 网络不可用的问题.
重装了系统,新建了一个ubuntu虚拟机,加载原来的镜像,结果启动后网络变得不正常了,提示信息 Waiting for network configuration...Waiting up to 60 ...
- Hexo博客skapp主题部署填坑指南
相信大家都很喜欢 hexo skapp 的主题,由于作者采用结巴分词,加上需要依赖各种各样的环境 所以可能大家踩过很多坑,也许每个人踩得坑不一样,这里使用 Docker 容器 centos 来部署, ...
- redhat 6.4 双网卡绑定
linux系统配置 1.redhat 6.4 双网卡绑定 1)#ethtool eth* //在服务器网口接网线至笔记本,确定各网口的配置文件: 2)切换目录 #cd /etc/sysconfig/n ...
- Linux 双网卡绑定技术
bond技术是在linux2.4以后加入内核. 一般步骤是1.把bonding模块加入内核, 2 编辑要绑定的网卡设置,去除地址设定 3 添加bond设备,设置地址等配置 4 重启网络 5 在交换机 ...
- 网络编程懒人入门(九):通俗讲解,有了IP地址,为何还要用MAC地址?
1.前言 标题虽然是为了解释有了 IP 地址,为什么还要用 MAC 地址,但是本文的重点在于理解为什么要有 IP 这样的东西.本文对读者的定位是知道 MAC 地址是什么,IP 地址是什么. (本文同步 ...
- virtualbox 最小化安装centos7 配置双网卡(nat和桥接)记录----已经过期
该文章已经过期 请参考另一篇文章:virtualbox 安装centos7 配置桥接网卡,实现主机和虚拟机互通,虚拟机可以访问外网,解决无法上网问题 先说明一下为什么要配置双网卡? 配置nat ...
随机推荐
- Gitlab注册Runner
1.先启动Gitlab,然后登陆进去,找到项目设置界面 2.部署Runner 这里采用docker安装的方式,也可以采用其他方式安装 # 创建docker镜像使用的数据卷 {20-07-16 16:2 ...
- aardio + AutoHotkey 混合编程
本文主要介绍 aardio + AutoHotkey 混合编程. 在 aardio 中可以调用很多编程语言,例如 C语言.C++.C#.Java.Python.R.Javascript.Node.Js ...
- 高光谱图像分类简述+《Deep Learning for Hyperspectral Image Classification: An Overview》综述论文笔记
论文题目<Deep Learning for Hyperspectral Image Classification: An Overview> 论文作者:Shutao Li, Weiwei ...
- Module加载的详细说明-保证你有所收获
模块 HTML 网页中,浏览器通过<script>标签加载 JavaScript 脚本. <!-- 页面内嵌的脚本 --> <script type="appl ...
- Java泛型的总结
泛型可以用于接口.类.方法上.还有泛型通配符这个概念 泛型的好处:可以在编译时检查 1.用于方法中,指定该方法中的形参的类型. 语法:修饰符 <代表泛型的变量> 返回值类型 方法名(参数) ...
- Docker搭建kafka及监控
环境安装 docker安装 yum update yum install docker # 启动 systemctl start docker # 加入开机启动 systemctl enable do ...
- LeetCode - 数组遍历
1. 485. 最大连续 1 的个数 1.1 分析题意 首先:我们求的是连续的1的个数,所以我们不能也没必要对数组进行排序: 其次:只要求求出最大连续1的个数,并不要求具体的区间数目,所以我们只需要用 ...
- PTA 1126 Eulerian Path
无向连通图,输出每个顶点的度并判断Eulerian.Semi-Eulerian和Non-Eulerian这3种情况,我们直接记录每个点所连接的点,这样直接得到它的度,然后利用深度优先和visit数组来 ...
- Java学习之路:运算符
2022-10-10 10:34:08 1 运算符 算术运算符:+, -, *, /, %, ++, -- 赋值运算符:= 关系运算符:>, <, >=, <=, ==, != ...
- Linux实战笔记_CentOS7_格式化磁盘
fdisk -l #检查是否添加成功(添加一块磁盘并重启计算机后) fdisk /dev/sdb #格式化磁盘 mount /dev/sdb1 /opt #挂载到/opt目录 df -h #查看是否挂 ...