填坑日志-云网络智慧课堂双网卡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 ...
随机推荐
- SpringBoot课程学习(一)
@SpringBootTest指定测试的启动类 声明@SpringBootTest @Test注解 @Test 指定测试方法 @Order排序 一:先声明排序模式 @TestMethodOrder(M ...
- python-数据描述与分析2(利用Pandas处理数据 缺失值的处理 数据库的使用)
2.利用Pandas处理数据2.1 汇总计算当我们知道如何加载数据后,接下来就是如何处理数据,虽然之前的赋值计算也是一种计算,但是如果Pandas的作用就停留在此,那我们也许只是看到了它的冰山一角,它 ...
- 备份 MySQL 的 shell 脚本(mysqldump版本) shell脚本
#!/bin/bash # 备份 MySQL 的 shell 脚本(mysqldump版本) # 定义变量 user(数据库用户名),passwd(数据库密码),date(备份的时间标签) # dbn ...
- JavaScript基本语法(JavaScript代码嵌入方式与声明和使用变量)
.JavaScript代码嵌入方式 #①HTML文档内 JavaScript代码要写在script标签内 script标签可以写在文档内的任意位置 为了能够方便查询或操作HTML标签(元素)scrip ...
- 用copyof来复制数组
public static void main(String[] args) { //Arrays.copyOf将数组复制到另一个数组,截断.扩容 String[] a={"1", ...
- Mysql 用户远程登录数据库
其实这个技术不难.我只是站在巨人的肩膀上.梳理一下我遇见的问题. 方法有两种.修改当前用户的host 为 %.或者直接授权(推荐) 直接授权: # mysql -u root -proot // 登 ...
- nginx 客户端返回499的错误码
我们服务器客户端一直有返回错误码499的日志,以前觉得比例不高,就没有仔细查过,最近有领导问这个问题,为什么耗时只有0.0几秒,为啥还499了?最近几天就把这个问题跟踪定位了一下,这里做个记录 网络架 ...
- 独立按键控制led灯
#include "regx51.h"typedef unsigned int u16; void delay_us(u16 time){ while(time--){} }voi ...
- 04 uniapp/微信小程序 项目day04
一.加入购物车 1.1 购物车数量 先创建购物车git 这里的数据肯定要做全局数据,因为不能只在details这个页面去操作他,他到底有几个也是由购物车页面获取到的 所以需要vuex 创建store文 ...
- 思维分析逻辑 1 DAY
数据分析原则:坚决不做提数机器. 数据分析工作模块 日报 了解业务现状 提升数据敏感性 数据波动解释 周报 了解数据的短期趋势 版本迭代分析 为结论型报告背书 月报 梳理业务的流程 为决策提供部分建议 ...