填坑日志-云网络智慧课堂双网卡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 ...
随机推荐
- 彻底掌握Makeifle(三)
彻底掌握Makeifle(三) 前言 在前面的文章彻底掌握Makefile(一)和彻底掌握Makefile(二)当中,我们简要的介绍了一些常见的makefile使用方法,在本篇文章当中我们将继续介绍一 ...
- Java 基础三、接口与内部类
1. 在Java程序语言中,接口是对类的一种描述.例如Arrays类中sort方法声明可以对对象进行排序,但前提是对象所属的类必须实现Comparable接口. public interface ...
- STM32的SPI口的DMA读写[原创www.cnblogs.com/helesheng]
SPI是我最常用的接口之一,连接管脚仅为4根:在常见的芯片间通信方式中,速度远优于UART.I2C等其他接口.STM32的SPI口的同步时钟最快可到PCLK的二分之一,单个字节或字的通信时间都在us以 ...
- linux基础总结
linux的特点 - 免费的/开源 - 支持多线程/多用户 - 安全性好 - 对内存和文件管理优越 关机命令 shutdown -h now(立即进行关机 ...
- Centos7使用sendEmail-v1.56发送邮件
Centos7使用sendEmail-v1.56发送邮件 注意:Centos7默认使用perl5.16,而sendEmail-v.1.56要求使用perl5.10.否则会报以下错误.所以需要下载并安装 ...
- 1.RabbitMQ系列之服务启动
1. docker方式启动MQ # latest RabbitMQ 3.10 docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:156 ...
- 20220729 - DP训练 #2
20220729 - DP训练 #2 时间记录 \(8:00-8:10\) 浏览题面 \(8:10-8:50\) T1 看题想到了建树,从每一个点遍历,若能遍历每一个点,则可以获胜 快速写完之后,发现 ...
- NLP之基于Seq2Seq和注意力机制的句子翻译
Seq2Seq(Attention) @ 目录 Seq2Seq(Attention) 1.理论 1.1 机器翻译 1.1.1 模型输出结果处理 1.1.2 BLEU得分 1.2 注意力模型 1.2.1 ...
- 42.JSON Web Token认证
JSON Web Token认证介绍 简称JWT认证,一般用于用户认证 JWT是一种相当新的标准,可用于基于token的身份验证 与内置的TokenAuthentication方案不同,JWT不需要使 ...
- SQL中的转义字符和通配符
一.通配符 如果想查找"_cs"结尾的的账户 select * from [user] where loginname like '%_cs'是不行的, _ 被认为是任意的字 ...