引言
前面已经对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的界面看到上网状态,但是确实可以工作。
最后再次感谢可爱无辜猫猫头所做的分析工作。