引言
前面已經對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的界面看到上網狀態,但是確實可以工作。
最后再次感謝可愛無辜貓貓頭所做的分析工作。