【BQ3568HM开发板】如何在OpenHarmony上通过校园网的上网认证

ops/2025/3/3 6:49:15/

引言

前面已经对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的界面看到上网状态,但是确实可以工作。

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

文章来源:https://blog.csdn.net/bit_mike/article/details/145325759
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/ops/154650.html

相关文章

性能测试丨分布式性能监控系统 SkyWalking

软件测试领域&#xff0c;分布式系统的复杂性不断增加&#xff0c;如何保证应用程序的高可用性与高性能&#xff0c;这是每一个软件测试工程师所面临的重大挑战。幸运的是&#xff0c;现在有了一些强大的工具来帮助我们应对这些挑战&#xff0c;其中之一便是Apache SkyWalking。…

Kafka运维宝典 (四)- Kafka 常用命令介绍

Kafka运维宝典 &#xff08;四&#xff09;- Kafka 常用命令介绍 文章目录 Kafka运维宝典 &#xff08;四&#xff09;- Kafka 常用命令介绍1. Kafka Broker 管理相关命令1.1 查看 Kafka Broker 信息1.2 查看 Kafka Broker API 版本 2. Kafka 主题管理相关命令2.1 查看所有主题…

力扣hot100--2

文章目录 力扣hot100-矩阵题目&#xff1a;矩阵置零题解 题目&#xff1a;螺旋矩阵题解 题目&#xff1a;旋转图像题解 力扣hot100-矩阵 题目&#xff1a;矩阵置零 原题链接&#xff1a;矩阵置零 题解 方法&#xff1a;通过先标记需要置为 0 的位置&#xff0c;再进行修改…

20250124 Flink 增量聚合 vs 全量聚合

1. 增量聚合 vs 全量聚合 (1) 增量聚合&#xff08;ReduceFunction / AggregateFunction&#xff09; 工作方式&#xff1a; 逐步计算&#xff1a;每一条数据到达窗口时&#xff0c;立即与当前聚合结果结合&#xff0c;生成新的中间结果。 仅保存中间状态&#xff1a;内存中只…

活动回顾和预告|微软开发者社区 Code Without Barriers 上海站首场活动成功举办!

Code Without Barriers 上海活动回顾 Code Without Barriers&#xff1a;AI & DATA 深入探索人工智能与数据如何变革行业 2025年1月16日&#xff0c;微软开发者社区 Code Without Barriers &#xff08;CWB&#xff09;携手 She Rewires 她原力在大中华区的首场活动“AI &…

深入解析 C++17 中的 std::not_fn

文章目录 1. std::not_fn 的定义与目的2. 基本用法2.1 基本示例2.2 使用 Lambda 表达式2.3 与其他函数适配器的比较3. 在标准库中的应用3.1 结合标准库算法使用3.1.1 std::find_if 中的应用3.1.2 std::remove_if 中的应用3.1.3 其他标准库算法中的应用4. 高级技巧与最佳实践4.1…

pytorch实现半监督学习

半监督学习&#xff08;Semi-Supervised Learning&#xff0c;SSL&#xff09;结合了有监督学习和无监督学习的特点&#xff0c;通常用于部分数据有标签、部分数据无标签的场景。其主要步骤如下&#xff1a; 1. 数据准备 有标签数据&#xff08;Labeled Data&#xff09;&…

Redis内部数据结构--跳表详解

跳表 1. 什么是跳表--skiplist2. skiplist的效率如何保证3. 跳表的实现4. 跳表与平衡搜索树和哈希表的对比 1. 什么是跳表–skiplist skiplist本质上也是一种查找结构&#xff0c;用于解决算法中的查找问题&#xff0c;跟平衡搜索树和哈希表的价值是一样的&#xff0c;可以作为…