【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.htmlhttps://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/thuloginhttps://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的界面看到上网状态,但是确实可以工作。

最后再次感谢可爱无辜猫猫头所做的分析工作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/66883.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(Java版本)基于JAVA的网络通讯系统设计与实现-毕业设计

源码 论文 下载地址&#xff1a; ​​​​c​​​​​​c基于JAVA的网络通讯系统设计与实现(源码系统论文&#xff09;https://download.csdn.net/download/weixin_39682092/90299782https://download.csdn.net/download/weixin_39682092/90299782 第1章 绪论 1.1 课题选择的…

SpringCloud微服务Gateway网关简单集成Sentinel

Sentinel是阿里巴巴开源的一款面向分布式服务架构的轻量级流量控制、熔断降级组件。Sentinel以流量为切入点&#xff0c;从流量控制、熔断降级、系统负载保护等多个维度来帮助保护服务的稳定性。 官方文档&#xff1a;https://sentinelguard.io/zh-cn/docs/introduction.html …

vscode环境中用仓颉语言开发时调出覆盖率的方法

在vscode中仓颉语言想得到在idea中利用junit和jacoco的覆盖率&#xff0c;需要如下几个步骤&#xff1a; 1.在vscode中搭建仓颉语言开发环境&#xff1b; 2.在源代码中右键运行[cangjie]coverage. 思路1&#xff1a;编写了测试代码的情况&#xff08;包管理工具&#xff09; …

pikachu靶场-敏感信息泄露概述

敏感信息泄露概述 由于后台人员的疏忽或者不当的设计&#xff0c;导致不应该被前端用户看到的数据被轻易的访问到。 比如&#xff1a; ---通过访问url下的目录&#xff0c;可以直接列出目录下的文件列表; ---输入错误的url参数后报错信息里面包含操作系统、中间件、开发语言的版…

安卓动态设置Unity图形API

命令行方式 Unity图像api设置为自动,安卓动态设置Vulkan、OpenGLES Unity设置 安卓设置 创建自定义活动并将其设置为应用程序入口点。 在自定义活动中,覆盖字符串UnityPlayerActivity。updateunitycommandlineararguments (String cmdLine)方法。 在该方法中,将cmdLine…

低代码可视化-转盘小游戏可视化-代码生成器

转盘小程序是一种互动工具&#xff0c;它通过模拟真实的转盘抽奖或决策体验&#xff0c;为用户提供了一种有趣且公平的选择方式。以下是对转盘小程序的详细介绍&#xff1a; 转盘小程序的应用场景 日常决策&#xff1a;转盘小程序可以帮助用户解决日常生活中的选择困难问题&a…

MongoDB文档查询

一、实验目的 1. 理解MongoDB文档数据库的基本概念和特性。 2. 掌握在MongoDB中创建集合和插入文档数据的方法。 3. 学习使用MongoDB进行文档查询操作&#xff0c;包括查询、过滤和排序等。 二、实验环境准备 1. JAVA环境准备&#xff1a;确保Java Development Kit (J…

速通Docker === 使用最佳实践总结

目录 主要使用步骤 1. 命令 2. 网络 3. 存储 卷存储&#xff08;Volumes&#xff09; 目录挂载&#xff08;Bind Mounts&#xff09; 比较 4. 环境变量 5. 端口 示例&#xff1a;启动 MySQL 容器 解释&#xff1a; 总结 Docker 是一个开源的应用容器引擎&#xff0…

Postgresql源码(140)理解PG的编译流程(make、Makefile、Makefile.global.in)

PG16 PG中使用的makefile看起来代码比较多&#xff0c;但是实际逻辑比较简单&#xff0c;这里做一些抽象总结。 总结 Makefile.global.in的$(recurse)宏自动生成了target&#xff0c;可以方便的进入内存目录进行编译。 all: all-common-recurse all-common-recurse: submak…

c语言中的数组(上)

数组的概念 数组是⼀组相同类型元素的集合&#xff1b; 数组中存放的是1个或者多个数据&#xff0c;但是数组元素个数不能为0。 数组中存放的多个数据&#xff0c;类型是相同的。 数组分为⼀维数组和多维数组&#xff0c;多维数组⼀般⽐较多⻅的是⼆维数组。 数组创建 在C语言…

戴尔电脑设置u盘启动_戴尔电脑设置u盘启动多种方法

最近有很多网友问&#xff0c;戴尔台式机怎么设置u盘启动&#xff0c;特别是近两年的戴尔台式机比较复杂&#xff0c;有些网友不知道怎么设置&#xff0c;其实设置u盘启动有两种方法&#xff0c;下面小编教大家戴尔电脑设置u盘启动方法。 戴尔电脑设置u盘启动方法一、戴尔进入b…

2【选修】再探宝可梦、数码宝贝分类器

1 Pokemon/Digimon Classifier 1.1 Observation 1.2 Function 1.3 Loss 1.4 Training Examples – OOPS what do we want? 2 What is the probability of sampling bad D t r a i n D_{train} Dtrain​ 2.1 Theroy – Larger N N N smaller ∣ H ∣ |H| ∣H∣ 2.2…

ASP.NET Core 6.0 如何处理丢失的 Startup.cs 文件

介绍 .NET 6.0 已经发布&#xff0c;ASP.NET Core 6.0 也已发布。其中有不少变化让很多人感到困惑。例如&#xff0c;“谁动了我的奶酪”&#xff0c;它在哪里Startup.cs&#xff1f;在这篇文章中&#xff0c;我将深入研究这个问题&#xff0c;看看它移动到了哪里以及其他变化。…

欧几里得算法求最小公倍数和最大公约数

一.最大公约数 gcd(a,b)gcd(b,a%b) 递归式,当且仅当b0&#xff0c;易得0和a的公约数为a.(可作为递归的出口) 证明&#xff1a; int gcd(int a, int b) {if (b 0) return a;else return gcd(b, a % b); } 二.最小公倍数 给定整数a b&#xff0c;求a b的最小公倍数 有图可知…

文档解析:PDF里的复杂表格、少线表格如何还原?

PDF中的复杂表格或少线表格还原通常需要借助专业的工具或在线服务&#xff0c;以下是一些可行的方法&#xff1a; 方法一&#xff1a;使用在线PDF转换工具 方法二&#xff1a;使用桌面PDF编辑软件 方法三&#xff1a;通过OCR技术提取表格 方法四&#xff1a;手动重建表格 …

【C++高并发服务器WebServer】-2:exec函数簇、进程控制

本文目录 一、exec函数簇介绍二、exec函数簇 一、exec函数簇介绍 exec 函数族的作用是根据指定的文件名找到可执行文件&#xff0c;并用它来取代调用进程的内容&#xff0c;换句话说&#xff0c;就是在调用进程内部执行一个可执行文件。 exec函数族的函数执行成功后不会返回&…

TDengine 与上海电气工业互联网平台完成兼容性认证

在工业数字化转型和智能化升级的浪潮中&#xff0c;企业对高效、可靠的数据管理解决方案的需求日益增长。特别是在风电智能运维、火电远程运维、机床售后服务等复杂多样的工业场景下&#xff0c;如何实现海量设备和时序数据的高效管理&#xff0c;已经成为推动行业升级的关键。…

machine learning knn算法之使用KNN对鸢尾花数据集进行分类

通过导入必要的scikit-learn导入必要的库&#xff0c;加载给定的数据&#xff0c;划分测试集和训练集之后训练预测和评估即可 具体代码如下&#xff1a; import numpy as np from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split f…

C++ 入门速通-第1章【黑马】

内容来源于&#xff1a;黑马 集成开发环境&#xff1a;CLion CLion的官方下载网址&#xff1a;CLion: A Cross-Platform IDE for C and C by JetBrains 我在b站找到了一个安装教程&#xff0c;可以按照这个视频教程进行安装&#xff08;内置汉化教程&#xff09;&#xff1a; …

Python的进程和线程

ref 接受几个设定: 进程是一家almost密不透风的公司,缅甸KK园区 线程里面工作的…人 进程**[园区]**内公共资源对于进程来说,可以共享. 别的园区[进程],一般不能和自己的园区共享人员资源,除非… 好的,现在再接受设定: 单个CPU在任一时刻只能执行单个线程&#xff0c;只有…