Forum bloga technologicznego JDtech.pl i użytkowników bezpłatnego dostępu do internetu Aero2

Pełna wersja: HiLink API dla urządzeń Huawei
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Stron: 1 2 3
Na GitHubie można znaleźć nawet biblioteki Pythonowe do obsługi API HiLinka, trzeba tylko poszukać i pogrzebać. Wszystko jest opisane tylko pewnie nie gołymi słowami.
Wiem, że po zalogowaniu dostajemy token, którym trzeba się potem posługiwać jakoś specyficznie, ale sam tego nie robiłem.
Z pewnością można, bo wykresy siły sygnału Huawei'a, które wrzucałem w innym wątku pochodzą z HA, a konkretniej z integracji Huawei LTE, która właśnie korzysta z API (ale ta integracja służy głównie wizualizacji i oczywiście nie obsługuje USSD na obecnym etapie rozwoju, choć SMS'y są):
https://github.com/home-assistant/core/t...huawei_lte
Ponieważ nie mam Linuksa w sieci z routerem, to napisałem (przepisałem) krótki skrypcik w index.php, który zwraca kod/zmienną firstnonce.
Kod:
<?php
$ctx = hash_init('sha256');
hash_update($ctx, time().date("-m-d H:i:s"));
echo hash_final($ctx);
?>
Jest on w katalogu firstNonce na zewnętrznym serwerze.
Wcześniejsze komendy dotyczące tokena i identyfikatora sesji pozostają bez zmian.
Dodałem polecenia
Kod:
curl http://serwer.www.pl/firstNonce/ > fN.txt
set /p firstNonce= < fN.txt
curl -X POST -d "<request><username>admin</username><firstnonce>"%firstNonce%"</firstnonce><mode>1</mode></request>" http://192.168.8.1/api/user/challenge_login -H "%ses%" -H "%tok%" -H "Content-Type: text/xml"
W odpowiedzi dostałem
Kod:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<salt>[kod salt]</salt>
<modeselected>1</modeselected>
<servernonce>[kod servernonce]</servernonce>
<newType>0</newType>
<iterations>100</iterations>
</response>
W kolejnym kroku procesu logowania wywoływane jest
http://192.168.8.1/api/user/authentication_login
gdzie token jest inny i brany z otrzymanej odpowiedzi, a w zapytaniu POST w miejsce kodu finalnonce wstawia się kod servernonce.

Natomiast przy wywołaniu
Kod:
curl -X POST -d "<request><username>admin</username><firstnonce>"%firstNonce%"</firstnonce><mode>1</mode></request>" http://192.168.8.1/api/user/login -H "%ses%" -H "%tok%" -H "Content-Type: text/xml"
otrzymuję odpowiedź
Kod:
<?xml version="1.0" encoding="UTF-8"?><response>OK</response>

Tyle udało się na razie zrobić.
W prymitywny sposób (jak poprzednio) całą procedurę uzyskiwania wartości zmiennej clientproof zrobiłem w zewnętrznym skrypcie PHP.

Udało się też autoryzować z poziomu konsoli Windows przez wywołanie authentication_login
Kod:
curl -X POST -d "<request><clientproof>%clientproof%</clientproof><finalnonce>%serw%</finalnonce></request>" -i http://192.168.8.1/api/user/authentication_login -H "%ses%" -H "%tok2%" -H "Content-Type: text/xml"
Oczywiście ze zmienionym tokenem (tok2) wyciągniętym z nagłówka odpowiedzi po wywołaniu challenge_login.
Odpowiedź z wywołania authentication_login ustawiła też nowy identyfikator sesji (ses2).
Mimo jego użycia
Kod:
curl -X POST -d "<request><content>*121#</content></request>" http://192.168.8.1/api/ussd/send -H "%ses2%" -H "%tok2%" -H "Content-Type: text/xml"
nadal jest zwracany błąd 125002, czyli błąd (błąd sesji - przeterminowany SessionID).
Na razie nie mam pomysłu jak rozwiązać wysyłanie kodów USSD.
Niestety nie sprawdziłem wcześniej, czy modu jest włączony.
Okazuje się, że po wydaniu polecenia
Kod:
curl http://192.168.8.1/api/global/module-switch
że, między innymi, <ussd_enabled>0</ussd_enabled>
Nie wiem jak to włączyć, ale może się okazać niemożliwe, ze względu na ustawienie w jakimś pliku konfiguracyjnym, do którego nie ma dostępu.
Zawsze się można wbić do systemu operacyjnego niskopoziomowo i po prostu włączyć. Pytanie, czy druga strona (system czasu rzeczywistego odpowiedzialny za komunikację z siecią komórkową takie polecenie przyjmie).
Jak to zrobić?
Jeśli można coś zrobić niesztampowego z tym sprzętem to na 99% znajdziesz to opisane tam:
https://4pda.ru/forum/index.php?showtopic=979117
(niewiele jest w porównaniu do starszych modeli, więc pozostaje poczekać, może coś ciekawego się jeszcze pojawi w najbliższych latach)
Generalnie to co opisuje Jakub wymaga zmodyfikowanego firmware, na fabrycznym nie widzę szans (możesz poczytać np. o B315 czy innych starszych modelach by zobaczyć o co chodzi).
Stron: 1 2 3
Przekierowanie