【BQ3568HM开发板】如何在OpenHarmony上通过校园网的上网认证
引言
前面已经对BQ3568HM开发板进行了初步测试,后面我要实现MQTT的工作,但是遇到一个问题,就是开发板无法通过校园网的认证操作。未认证的话会,学校使用的深澜软件系统会屏蔽所有除了认证用的流量。好在我们学校使用的认证系统和清华大学是相同的,而有个清华的大牛已经逆向分析了深澜软件所使用的认证算法,所以我可以借用一下他的研究,详细内容可以参考:让f1c100s开发板通过认证接入校园网 - 可爱无辜猫猫头 - 博客园title: 让f1c100s通过认证接入校园网 date: 2023-08-22 17:02:22 tags: categories: embedded 书接上回,我们给一块小小的f1c100s开发板上配好了以太网的驱动,但是由于学校的校园网需要认证,未认证的话会使用防火墙屏蔽所有除了认证用的流量https://www.cnblogs.com/maomaotou-thu/p/17649558.html
https://www.cnblogs.com/maomaotou-thu/p/17649558.html
工作原理
深澜的portal认证,总共就两步,并且写进了网页的js里边,所以要实现认证上网只需要分析其代码,然后将JavaScript代码转换为C++,当然这个工作极其麻烦。
认证过程分为两步,第一步是challenge。通过调用这个接口我们得到了待认证客户端的ip地址和服务端传来的token令牌。接下来,需要使用这个令牌生成一堆签名。
准备好以上数据后就可以调用srun_portal接口了,这个地址只需从challenge的url中把challenge替换成srun_portal就可以得到。
清华同学的程序仓库参见:GitHub - gtxzsxxk/thulogin: 贵校校园网portal认证,CLI界面,用于嵌入式设备贵校校园网portal认证,CLI界面,用于嵌入式设备. Contribute to gtxzsxxk/thulogin development by creating an account on GitHub.https://github.com/gtxzsxxk/thulogin
https://github.com/gtxzsxxk/thulogin
程序移植到OpenHarmony
接下来介绍如何修改上面的代码,将程序移植到BQ3568HM开发板。
CMakeFiles.txt
Thulogin的CMake版本要求太高了,修改一下CMakeFiles.txt的第一行:
cmake_minimum_required(VERSION 3.16.1)
PwdInput.h和PwdInput.cpp
这两个文件是为了输入密码的,它用到了getpass这个函数,不过我使用的OpenHarmony SDK的Native工具不包括这个函数,所以修改如下:
.h文件:
#if defined(_WIN32) || defined(__CYGWIN__) || defined(__MUSL__)
#include <iostream>
#ifndef __MUSL__
#include <conio.h>
#endif
#else
.cpp文件:
std::string pwd_input(std::string prompt) {std::string pwd;
#if defined(_WIN32) || defined(__CYGWIN__) || defined(__MUSL__ )std::cout << prompt;/* TODO: more elegant way */std::cin >> pwd;
#elsepwd = getpass(prompt.c_str());
#endifreturn pwd;
}
因为不知道OpenHarmony中哪个预定义的宏表示当前是OH系统,所以用__MUSL__ 临时代替。
程序编译
然后使用如下命令行进行程序编译:
g:\Huawei\OpenHarmony\Sdk\11\native\build-tools\cmake\bin\cmake -G Ninja -B out -DCMAKE_TOOLCHAIN_FILE=g:\Huawei\OpenHarmony\Sdk\11\native\build\cmake\ohos.toolchain.cmake -DCMAKE_MAKE_PROGRAM=g:\Huawei\OpenHarmony\Sdk\11\native\build-tools\cmake\bin\ninja.exe -DCMAKE_BUILD_WITH_INSTALL_RPATH=true -DOHOS_ARCH=armeabi-v7a
这里的OHOS_ARCH变量是根据BQ3568HM开发板默认镜像设置的,如果采用的镜像不同,可能需要修改一下。
生成makefile之后,执行如下命令产生可执行文件:
g:\Huawei\OpenHarmony\SDK\11\native\build-tools\cmake\bin\cmake --build out
运行结果
先看一下网卡的IP地址。
# ifconfig
lo Link encap:Local Loopbackinet addr:127.0.0.1 Mask:255.0.0.0inet6 addr: ::1/128 Scope: HostUP LOOPBACK RUNNING MTU:65536 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:0 TX bytes:0eth0 Link encap:Ethernet HWaddr 28:75:d8:ba:22:c4 Driver rk_gmac-dwmacinet addr:10.15.6.24 Bcast:10.15.7.255 Mask:255.255.254.0inet6 addr: fe80::2a75:d8ff:feba:22c4/64 Scope: LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:879 errors:0 dropped:0 overruns:0 frame:0TX packets:92 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:62514 TX bytes:20916Interrupt:46eth1 Link encap:Ethernet HWaddr 28:75:d8:ba:22:c3 Driver rk_gmac-dwmacUP BROADCAST MULTICAST MTU:1500 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:0 TX bytes:0Interrupt:58wlan0 Link encap:Ethernet HWaddr f8:54:f6:0a:e1:f1 Driver bcmsdh_sdmmcinet6 addr: fe80::fa54:f6ff:fe0a:e1f1/64 Scope: LinkUP BROADCAST MULTICAST MTU:1500 Metric:1RX packets:4 errors:0 dropped:81 overruns:0 frame:0TX packets:18 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:102 TX bytes:1227
将thulogin可执行文件和libc++_shared.so拷贝到板子上,然后就可以在hdc shell中执行如下命令:
./thulogin --server http://10.0.0.55 --user 6120100000 --pwd 12345678 --ac-id 8
程序执行过程如下:
****** thulogin ******
*** Initializing*** Auth Server: http://10.0.0.55
*** Auth Ac_id: 8
*** Auth U/A: Mozilla/5.0 (Windows NT 10.0; Win64; x64)*** Start authenticating...
*** Authenticate Username: 6120100000
*** Logged in successfully!
联网成功。看看能不能ping到外网。
# ping www.baidu.com
Ping www.baidu.com (110.242.69.21): 56(84) bytes.
64 bytes from 110.242.69.21: icmp_seq=1 ttl=51 time=10 ms
64 bytes from 110.242.69.21: icmp_seq=2 ttl=51 time=10 ms
64 bytes from 110.242.69.21: icmp_seq=3 ttl=51 time=10 ms--- 110.242.69.21 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss
round-trip min/avg/max = 10/10/10 ms
再登录到自助服务平台看看。

确实已经上网了。
结语
上网之后,无法从OpenHarmony的界面看到上网状态,但是确实可以工作。
最后再次感谢可爱无辜猫猫头所做的分析工作。
相关文章:
【BQ3568HM开发板】如何在OpenHarmony上通过校园网的上网认证
引言 前面已经对BQ3568HM开发板进行了初步测试,后面我要实现MQTT的工作,但是遇到一个问题,就是开发板无法通过校园网的认证操作。未认证的话会,学校使用的深澜软件系统会屏蔽所有除了认证用的流量。好在我们学校使用的认证系统和…...
動態住宅IP提升網站訪問成功率
動態住宅IP通常與普通家庭用戶的網路連接相關聯。這種IP地址的特點在於,它是動態變化的,用戶在每次連接時可能會獲得不同的IP地址。這與靜態IP形成了鮮明對比,後者在連接期間保持不變。傳統上,IP地址分為住宅IP和數據中心IP兩類。…...
2024年博客之星主题创作|2024年蓝桥杯与数学建模年度总结与心得
引言 2024年,我在蓝桥杯编程竞赛和数学建模竞赛中投入了大量时间和精力,这两项活动不仅加深了我对算法、数据结构、数学建模方法的理解,还提升了我的解决实际问题的能力。从蓝桥杯的算法挑战到数学建模的复杂应用,我在这些竞赛中…...
Spring Boot/MVC
一、Spring Boot的创建 1.Spring Boot简化Spring程序的开发,使用注解和配置的方式开发 springboot内置了tomact服务器 tomact:web服务器,默认端口号8080,所以访问程序使用8080 src/main/java:Java源代码 src/main/resource:静态资源或配置文件,存放前端代码(js,css,html) s…...
由于请求的竞态问题,前端仔喜提了一个bug
在平常的开发过程中,你可能会遇到这样一个bug。 测试:我在测一个输入框搜索的功能时,告诉你通过输入框输入的内容,和最终通过输入内容搜索出来的结果对不上。 前端:我是通过调用后端接口拿到的数据,这明显…...
【Day25 LeetCode】贪心Ⅲ
一、贪心Ⅲ 1、加油站 134 这道题直接想法是采用二重循环暴力搜索,简单粗暴但是会超时,是因为以每个点为起点最坏的情况可能都要遍历完全部的序列,有大量重复的操作,那有没有优化的地方呢?有一个结论:如果…...
蓝桥杯练习日常|递归-进制转换
未完待续,,,,,, 目录 蓝桥云课760数的计算 一、递归 题目: 我的解题代码: 二、进制转换 任意进制转十进制: 十进制转换为其他进制: 进制蓝桥杯题目…...
AI Agent:深度解析与未来展望
一、AI Agent的前世:从概念到萌芽 (一)早期探索 AI Agent的概念可以追溯到20世纪50年代,早期的AI研究主要集中在简单的规则系统上,这些系统的行为是确定性的,输出由输入决定。随着时间的推移,…...
《SwinIR:使用Swin-Transformer图像恢复》学习笔记
paper:2108.10257 GitHub:GitHub - JingyunLiang/SwinIR: SwinIR: 使用 Swin Transformer 进行图像修复 (官方仓库) 目录 摘要 1、Introduction 2、Related Work 2.1 图像修复 2.2 视觉Transformer…...
如何在Nginx服务器上配置访问静态文件目录并提供文件下载功能
引言 在搭建网站的过程中,我们经常需要让访客通过URL直接访问或下载存储在服务器特定目录下的静态文件。本文将详细介绍如何在Nginx服务器环境中配置一个名为"download"的文件目录,以便用户能够通过浏览器访问并下载其中的手册和其他文档。 …...
ansible自动化运维实战--script、unarchive和shell模块(6)
文章目录 一、script模块1.1、功能1.2、常用参数1.3、举例 二、unarchive模块2.1、功能2.2、常用参数2.3、举例 三、shell模块3.1、功能3.2、常用参数3.3、举例 一、script模块 1.1、功能 Ansible 的 script 模块允许你在远程主机上运行本地的脚本文件,其提供了一…...
理解深度学习pytorch框架中的线性层
文章目录 1. 数学角度: y W x b \displaystyle y W\,x b yWxb示例 2. 编程实现角度: y x W T b \displaystyle y x\,W^T b yxWTb3. 常见错误与易混点解析4. 小结参考链接 在神经网络或机器学习的线性层(Linear Layer / Fully Connect…...
电路研究9.2——合宙Air780EP使用AT指令
这里正式研究AT指令的学习了,之前只是接触的AT指令,这里则是深入分析AT指令了。 软件的开发方式: AT:MCU 做主控,MCU 发 AT 命令给模组的开发方式,模组仅提供标准的 AT 固件, 所有的业务控制逻辑…...
Qt数据库相关操作
目录 一、前言 二、类与接口介绍 1.连接管理类 2.数据操作类 3.数据模型类 4.其它类 三、主要操作流程 1.示例 2.绑定参数 3.事务操作 一、前言 要在Qt中操作数据库,首先要安装对应的数据库,还要确保安装了Qt SQL模块。使用MySQL时࿰…...
2025-01-22 Unity Editor 1 —— MenuItem 入门
文章目录 1 Editor 文件夹2 MenuItem3 使用示例3.1 打开网址3.2 打开文件夹3.3 Menu Toggle3.4 Menu 代码复用3.5 MenuItem 激活与失活4 代码示例 1 Editor 文件夹 Editor 文件夹是 Unity 中的特殊文件夹,Unity 中所有编辑器相关的脚本都需要放置在其中…...
解锁C#编程新姿势:Z.ExtensionMethods入门秘籍
一、引言 在 C# 的开发旅程中,我们常常会遇到各种重复性高、复杂度低的任务,这些任务虽然基础,但却占据了我们大量的开发时间。比如处理字符串时,经常需要进行非空判断、格式转换;操作日期时间时,计算某个…...
不使用 JS 纯 CSS 获取屏幕宽高
前言 在现代前端开发中,获取屏幕的宽度和高度通常依赖于 JavaScript。然而现代 CSS 也可以获取到屏幕的宽高,通过自定义属性(CSS Variables)和一些数学函数来实现这一目标。本文将详细解析如何使用 CSS 的 property 规则和一些数…...
Node.js NativeAddon 构建工具:node-gyp 安装与配置完全指南
Node.js NativeAddon 构建工具:node-gyp 安装与配置完全指南 node-gyp Node.js native addon build tool [这里是图片001] 项目地址: https://gitcode.com/gh_mirrors/no/node-gyp 项目基础介绍及主要编程语言 Node.js NativeAddon 构建工具(node-gyp…...
【ARTS】【LeetCode-704】二分查找算法
目录 前言 什么是ARTS? 算法 力扣704题 二分查找 基本思想: 二分查找算法(递归的方式): 经典写法(找单值): 代码分析: 经典写法(找数组即多个返回值) 代码分析 经典题目 题目描述: 官方题解 深入思考 模版一 (相错终止/左闭右闭) 相等返回情形…...
Vue.js 配置路由:基本的路由匹配
Vue.js 配置路由:基本的路由匹配 在 Vue.js 应用中,Vue Router 是官方提供的路由管理器,用于在单页应用(SPA)中管理不同的视图。通过配置路由,应用可以根据 URL 的变化展示相应的组件。 基本的路由匹配是…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
