云网络智慧课堂的双网卡问题记录及解决方案

教师端

其实这里双网卡的问题一直没有解决,分为了两部分,一部分是教师端,一部分是学生端。症状类似,问题也类似,都是在设计之初因为硬件限制可能没有考虑到双网卡的可能。稍微看了下代码,可能是后续发生了问题考虑了,但是没有详细地思考如何去处理这部分的代码,导致了这里仍然很多遗留问题却没有留下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地址读取错误的问题及解决的更多相关文章

  1. 网络基本概念备忘:MAC地址,端口,HTTP状态码

    MAC地址 英文MAC Address 英文全称: Media Access Control Address 别称:硬件位址 用途:定义网络设备位置 表示:十六进制数,6 Byte 特点:产品出产后M ...

  2. Android 获得本地IP地址、外网IP地址、本设备网络状态信息、本地Mac地址

    本地内网IP和外网IP的区别: 根据我的经验一台电脑需要两个ip才可以上网,一个是本地的内网ip 一个是外网的ip 本地的ip 一般是192.168.1.2这种样子  只要在不同的路由器上可以重复 外 ...

  3. CAN网络上新增加的设备与网络上已有设备MAC地址冲突的软件解决方案

    已知 1号的CAN节点的地址是0x1f 2号的CAN 节点的地址是0x1f 要达到的要求是 假设 网络上 CAN1 节点已经工作了,我现在需要在网络上接入CAN2节点. 那么CAN2节点首次上电的时候 ...

  4. 填坑...P1546 最短网络 Agri-Net

    P1546 最短网络 Agri-Net 难度普及/提高- 时空限制1s / 128MB 题目背景 农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场.当然,他需要 ...

  5. 解决Ubuntu Server 12.04换了网卡MAC地址后 网络不可用的问题.

    重装了系统,新建了一个ubuntu虚拟机,加载原来的镜像,结果启动后网络变得不正常了,提示信息 Waiting for network configuration...Waiting up to 60 ...

  6. Hexo博客skapp主题部署填坑指南

    相信大家都很喜欢 hexo skapp 的主题,由于作者采用结巴分词,加上需要依赖各种各样的环境 所以可能大家踩过很多坑,也许每个人踩得坑不一样,这里使用 Docker 容器 centos 来部署, ...

  7. redhat 6.4 双网卡绑定

    linux系统配置 1.redhat 6.4 双网卡绑定 1)#ethtool eth* //在服务器网口接网线至笔记本,确定各网口的配置文件: 2)切换目录 #cd /etc/sysconfig/n ...

  8. Linux 双网卡绑定技术

    bond技术是在linux2.4以后加入内核. 一般步骤是1.把bonding模块加入内核, 2 编辑要绑定的网卡设置,去除地址设定 3 添加bond设备,设置地址等配置 4  重启网络 5 在交换机 ...

  9. 网络编程懒人入门(九):通俗讲解,有了IP地址,为何还要用MAC地址?

    1.前言 标题虽然是为了解释有了 IP 地址,为什么还要用 MAC 地址,但是本文的重点在于理解为什么要有 IP 这样的东西.本文对读者的定位是知道 MAC 地址是什么,IP 地址是什么. (本文同步 ...

  10. virtualbox 最小化安装centos7 配置双网卡(nat和桥接)记录----已经过期

    该文章已经过期   请参考另一篇文章:virtualbox 安装centos7 配置桥接网卡,实现主机和虚拟机互通,虚拟机可以访问外网,解决无法上网问题   先说明一下为什么要配置双网卡? 配置nat ...

随机推荐

  1. 2016 ZCTF note3:一种新解法

    2016 ZCTF note3:一种新解法 最近在学习unlink做到了这道题,网上有两种做法:一种是利用edit功能读入id时整数溢出使索引为-1,一种是设置块大小为0使得写入时利用整数溢出漏洞可以 ...

  2. win10桌面右键卡顿卡死解决方法

    win+R,打开命令行 输入services.msc 找到NADIA Display Container LS,将其由自动改为禁用,解决问题. PS:网上有些改注册表的方法,确实可以治标,但是大家都应 ...

  3. iOS开发之自定义日历控件

    前言 日常开发中经常会遇到日期选择,为了方便使用,简单封装了一个日历控件,在此抛砖引玉供大家参考. 效果 功能 支持单选.区间 支持默认选中日期 支持限制月份 支持过去.当前.未来模式 支持frame ...

  4. 学习Java AES加解密字符串和文件方法,然后写个简单工具类

    Reference Core Java Volume Ⅱ 10th Edition 1 对称加密 "Java密码扩展"包含了一个Cipher,它是所有密码算法的超类.通过getIn ...

  5. Tauri-Vue3桌面端聊天室|tauri+vite3仿微信|tauri聊天程序EXE

    基于tauri+vue3.js+vite3跨桌面端仿微信聊天实例TauriVue3Chat. tauri-chat 运用最新tauri+vue3+vite3+element-plus+v3layer等 ...

  6. Java多线程(4):ThreadLocal

    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来- 为了提高CPU的利用率,工程师们创造了多线程.但是线程们说:要有光!(为了减少线程创建(T1启动)和销毁(T3切换)的时间),于是工程师们又接着 ...

  7. Ruoyi表单构建

    Ruoyi表单构建通过拖动组件就能自动生成前端代码,很方便,所以本文简单通过上层函数源码来梳理一下大致流程,如有需要再自行仔细一行行分析底层代码. 组件拖动 实现组件拖动功能主要依赖第三方库:VueD ...

  8. Vue 实现小小记事本

    1.实现效果 用户输入后按回车,输入的内容自动保存,下方会显示记录的条数,鼠标移动到文字所在div上,会显示删除按钮,点击按钮,相应记录会被删除,下方的记录条数会相应变化,点击clear,所有记录会被 ...

  9. xlwings 模块总结

    基本使用 在子线程中使用时,有时需要在子线程函数中加入以下.有时不需要加入,目前还不明白具体的原因 import pythoncom # 导入的库 pythoncom.CoInitialize() # ...

  10. Jmeter——请求响应内容乱码解决办法

    前段时间,换过一次设备,重新下载了Jmeter.有一次在编写脚本时,响应内容中的中文一直显示乱码. 遇到乱码不要慌,肯定是有办法来解决的.具体解决办法,可以参考之前的博文,Jmeter--BeanSh ...