HiLink API Huawei - Dyskusja

Kwestie techniczne, konfiguracja i rozwiązywanie problemów z modemami GSM (GPRS, EDGE, UMTS, HSDPA i HSUPA).

Moderator: Moderatorzy

ODPOWIEDZ
tosiek
Specjalista bezprzewodowy-junior
Posty: 292
Rejestracja: 2012-03-24, 14:00
Lokalizacja: inąd

Re: HiLink API Huawei - Dyskusja

Post autor: tosiek »

Na nowym firmware trzeba odświeżać token co każde zapytanie, nawet jeśli się nie zmieni.
(22.317.01.00.778
WEBUI: 17.100.13.01.03)

Zapytanie POST:
http://%modIPAdr%/api/ussd/send - należy zmienić na właściwy adres

Kod: Zaznacz cały

curl -X POST -d "ZAWARTOSC XMLa" http://%modIPAdr%/api/ussd/send %_SID% %_Token% -H "Content-Type: text/xml"
zapytanie GET:

Kod: Zaznacz cały

curl -X GET http://%modIPAdr%/api/ussd/get %_SID% %_Token%
Jak chcecie przkeirowac wyjście CURLa to trzeba dodac przełącznik -s np.:

Kod: Zaznacz cały

curl -X GET http://%modIPAdr%/api/ussd/status %_SID% %_Token% -s  | find "<result>0</result>" >nul
if errorlevel 1 (
echo nie znaleziono ciagu
) else (
echo znaleziono ciag
)

Samo pobieranie tokenu:
http://pastebin.com/49k5A30e
Źródło pobieranie tokenu: penknife @ http://forum.jdtech.pl/Watek-hilink-api ... 5#pid31735

Przykładowe wysłanie USSD (zakładam że macie tryb automatyczny lub 4g - umts):

Kod: Zaznacz cały

@echo off &:: HHL_token_test.bat
setlocal
set modIPAdr=192.168.8.1

call :getHHLToken %modIPAdr%
echo *****Stan konta*****
curl -X POST -d "<request><content>*101#</content><codeType></codeType><timeout>5</timeout></request>" http://%modIPAdr%/api/ussd/send %_SID% %_Token% -H "Content-Type: text/xml"  >nul
if "%~1"=="" echo.OK
call :usdchecker
curl -X GET http://%modIPAdr%/api/ussd/get %_SID% %_Token%
if "%~1"=="" echo.OK

endlocal
goto :eof

:usdchecker
setlocal EnableDelayedExpansion EnableExtensions
curl -X GET http://192.168.8.1/api/ussd/status %_SID% %_Token% -s  | find "<result>0</result>" >nul
if errorlevel 1 (
    ping -n 1 127.0.0.1 >nul
    goto usdchecker
)
endlocal
goto :eof

:getHHLToken &::[adres IP]:zwraca zmienne %_Token% oraz %_SID% z Huawei HiLink do wykorzystania z curl lub wget, przyjmując opcjonalnie adres IP modemu
setlocal
rem przypisanie zmiennej HHL adresu modemu
SET HHL=hi.link
rem przyjmij pierwszy parametr jako adres IP modemu lecz pierw zweryfikuj
if "%~1" neq "" if /i "%~1" neq "%HHL%" echo. %~1 |findstr /r /c:"^ *[0-9]*[0-9]\.[0-9]*[0-9]\.[0-9]*[0-9]\.[0-9]*[0-9] *$" >nul &&set HHL=%~1
rem inicjalizacja niepustych zmiennych
set "_SID= "
set "_Token= "
rem wyczyść zmienną z adresem ze spacji
set HHL=%HHL: =%
set _c=curl -q -s -X GET --stderr nul --max-time 5
rem pobranie tokena oraz ID sesji i przypisanie wartości
for /f "tokens=1-4 delims=<>" %%a in ('%_c% http://%HHL%/api/webserver/SesTokInfo ^|find /i "Info>"') do (
rem if /i "%%~c"=="/SesInfo" - sprawdza czy zmienna nie przekroczyła linii
if /i "%%~a"=="SesInfo" if /i "%%~c"=="/SesInfo" set _SID=--header "Cookie: %%b"
if /i "%%~a"=="TokInfo" if /i "%%~c"=="/TokInfo" set _Token=--header "__RequestVerificationToken: %%b"
rem jeżeli przed pierwszym znakiem < lub > coś występuje:
if /i "%%~b"=="SesInfo" if /i "%%~d"=="/SesInfo" set _SID=--header "Cookie: %%c"
if /i "%%~b"=="TokInfo" if /i "%%~d"=="/TokInfo" set _Token=--header "__RequestVerificationToken: %%c"
)

rem jeśli nowy token nie istnieje uzyskaj stary:
if "%_Token:~0,2%"==" " for /f "tokens=1-3 delims=<>" %%a in ('%_c% http://%HHL%/api/webserver/token ^|find /i "token"') do (
if /i "%%~a"=="token" set _Token=--header "__RequestVerificationToken: %%b"
if /i "%%~b"=="token" set _Token=--header "__RequestVerificationToken: %%c"
)

set _exit=0
if "%_SID:~0,2%"==" " set /a "_exit+=2"
if "%_Token:~0,2%"==" " set /a "_exit+=1"
endlocal &(set "_SID=%_SID%" )&(set "_Token=%_Token%" )& exit /b %_exit%
goto :eof
Gdzie :usdchecker sprawdza co sekundę czy modem dostał odpowiedź. Jeśli nie dostanie to chyba po 20 sekundach jest timeout, można ustawić w zapytaniu albo jest ingorowane.

W załączniku przykładowy skrypt dla Darmowy internet LTE w RedBullu. Przełącza na 4G->UMTS aby działało USSD. Sprawdza stan kona, pakietu MB oraz stan LTE i aktywuje, potem restartuje modem, czeka aż się wybudzi i wymusza tylko LTE. Sam restart modemu jeśli jest wpięty w router nic nie daje. Często bez restartu nie da się z powrotem włączyć tylko LTE.
kod: http://pastebin.com/TReTiFHa

Nie sprawdzam odpowiedzi modemu dla zmainy trybów 3g etc. Sprawdzam tylko czy curl nie wywalił błędu.

pinger sprawdza czy modem wstał.

Miłego skryptowania :)

PS skrypt popsuje wam ręczne wymuszanie częstotliwości jeśli robiliście.
brak podpisu, tak jakby
Awatar użytkownika
onken
** Moderator **
Posty: 6436
Rejestracja: 2014-06-07, 20:49
Lokalizacja: Kraków

Re: HiLink API Huawei - Dyskusja

Post autor: onken »

A mozna taki skrypt poprosić pod linuxa :) ??

Wypożyczę kartę no limit - Nielimitowany internet w T-Mobile lub Orange

Cena - 60 zł za m-c
Kontakt na PW
tosiek
Specjalista bezprzewodowy-junior
Posty: 292
Rejestracja: 2012-03-24, 14:00
Lokalizacja: inąd

Re: HiLink API Huawei - Dyskusja

Post autor: tosiek »

na linuxie curl ma praktycznie identyczna składnie
brak podpisu, tak jakby
beginnerpoland
Początkujący użytkownik forum
Posty: 3
Rejestracja: 2016-11-28, 12:32

Re: HiLink API Huawei - Dyskusja

Post autor: beginnerpoland »

Witam, odnosnie postów na temat uwalonego HUAWEI E3372s-153 mam kilka pytan poniewaz nie potrafie odnalezc jednoznacznego rozwiazania problemu.

Modem dzialal w trybie takim, iz po podlaczeniu do usb uruchamiala mi sie Playowska aplikacja itp, wszystko dzialalo normalnie ale zaczalem kombinowac podlaczajac go po usb do routera Asus Rtn10UB i predkosc ktora osiagalem to 9/1 mbps, po usb natomiast bezposrednio do pc 50/23 mbps w Playu LTE. Zaczalem więc modzić i chcialem sprobowac przerobic go w tryb Hilink (nie wiem czemu myslalem ze to cos da) Po zmianach i cudach wiankach na modemie mam teraz oprogramowanie 22.286.53.01.161 i raz udalo mi sie go wprowadzic tym switcherem.bat (tym executablem) w te tryby debug i project mode ale cos poszlo nie tak gdy chcialem wrocic z HILINK na normalny tryb. Modem byl widoczny pod adresem 192.168.8.1 a raz jako sterownik sieci NDIS w polaczeniach ( MOJ SYSTEM TO WINDOWS 7 64bit)
Natomiast teraz nie widzę go po usb, nie widzę go także w polaczeniach, brak pingu do 192.168.8.1 ani opcji wejscia przez webui na niego. Tak po prostu jest najwidoczniej zbrickowany. Czy jest opcja jakakolwiek aby przywrocic go do dashboardu playa i softa ktory mial wczesniej ?? bardzo mi na tym zalezy, probowalem wykonywac kroki opisywane w tutorialach ale przez to, że w polowie tutoriala jest przesiadka do nastepnego postu o wprowadzaniu w tryb DEBUG I PROJECT (przelaczanie skryptu) jest już kocioł i nie wiem ktore sterowniki powinny byc zainstalowane najpierw a ktore pozniej, oraz nawet kiedy modem ma byc wpiety pod usb a kiedy nie. Prosilbym o ewentualną pomoc jak doprowadzic do stanu takiego żebym chociaz widzial modem w tym switcherze albo zebym mial mozliwosc dostania sie chociaz przez web ui na niego. Modem uwalilem świadomie/nieświadomie i teraz bardzo chcialbym przywrocic go do poprzedniego stanu, i wypieprzyć ten hilink aby byl że tak powiem "jak fabryka w playu mi dała".

Prosze o pomoc, pozdrawiam !
tmks90
Stały użytkownik forum
Posty: 80
Rejestracja: 2017-11-08, 16:21

Re: HiLink API Huawei - Dyskusja

Post autor: tmks90 »

Witam. Bardzo prosze o pomoc. Posiadam modem E3372 z hilink. potrzebuje przerobić go żeby nie miał hilinka. Próbuje już tysiąca sposobów ale zawszez przy instalacji firmware wyskakuje błąd 10 przy wyszukiwaniu portu. Posiadam windows 10. Czy jest jakiś szybki sposób żeby to zrobić? Jeszcze raz bardzo prosze o pomoc bo już nie wiem co zrobić
tosiek
Specjalista bezprzewodowy-junior
Posty: 292
Rejestracja: 2012-03-24, 14:00
Lokalizacja: inąd

Re: HiLink API Huawei - Dyskusja

Post autor: tosiek »

tmks90 przełącz ręcznie w tryb debug lub project mode. Od hilinka usuń: Mobile broadband hl service
brak podpisu, tak jakby
Przmus
Stały użytkownik forum
Posty: 98
Rejestracja: 2012-06-02, 03:43
Lokalizacja: Polska

Re: HiLink API Huawei - Dyskusja

Post autor: Przmus »

Podzielę się z Wami moim sposobem na włączenie DMZ w Huawei B525, który mam od wczoraj.
Jest to router z T-mobile, więc brakuje masy ustawień, w tym DMZ. W związku z tym że jest on połączony Ethernetem do głównego, lepszego routera chciałem przekierować na niego cały ruch przychodzący.
Oczywiście dało się to zrobić ustawiając przekierowania portów ręcznie:

Kod: Zaznacz cały

Name 	WAN Port 	LAN IP Address 	LAN Port 	Protocol 	Status 	Options
Synology1	1-67	192.168.8.100	1-67	TCP/UDP	On	EditDelete
Synology2	69-513	192.168.8.100	69-513	TCP/UDP	On	EditDelete
Synology3	515-545	192.168.8.100	515-545	TCP/UDP	On	EditDelete
Synology4	547-1700	192.168.8.100	547-1700	TCP/UDP	On	EditDelete
Synology5	1702-9999	192.168.8.100	1702-9999	TCP/UDP	On	EditDelete
Synology6	10001-28089	192.168.8.100	10001-28089	TCP/UDP	On	EditDelete
Synology7	28091-49999	192.168.8.100	28091-49999	TCP/UDP	On	EditDelete
Synology8	50021-65535	192.168.8.100	50021-65535	TCP/UDP	On	EditDelete
Jednak dzisiaj, po znalezieniu tego tematu: viewtopic.php?t=42168
Zainteresowała mnie część o DMZ, adres: http://192.168.8.1/api/security/dmz
Po otworzeniu w przeglądarce wyświetlało się:

Kod: Zaznacz cały

100003
Ale to dlatego, że byłem niezalogowany. Po zalogowaniu wyglądało to tak:

Kod: Zaznacz cały

0192.168.8.100
Pierwsza cyfra to status tej opcji (wyłączona), a dalej adres IP (pewnie domyślnie ustawiony, ale taki właśnie otrzymuje router główny).

Bawiłem się chwilę żeby zmienić to korzystając z curla, ale w końcu poddałem się. Przyszedł mi na myśl pomysł aby zrobić to z poziomu przeglądarki, już po zalogowaniu. I tak udało mi się stworzyć skrypt dla rozszerzenia Tampermonkey: https://chrome.google.com/webstore/deta ... fkfo?hl=en
O następującej treści:

Kod: Zaznacz cały

// ==UserScript==
// @name         Przemek-Huawei-Post-Request
// @namespace    x
// @version      0.1
// @description  bla bla bla
// @author       Me
// @match        https://192.168.8.1/html/quicksetup.html
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    // Your code here...
    if (confirm('Wykonać skrypt z zapytaniem do routera Huawei?')) {
        var xmlhttp = new XMLHttpRequest();
        xmlhttp.open("GET", "/api/user/state-login", false);
        xmlhttp.send();
        alert("Status zalogowania:\n"+xmlhttp.responseText);

        xmlhttp = new XMLHttpRequest();
        xmlhttp.open("GET", "/api/security/dmz", false);
        xmlhttp.send();
        alert("Status DMZ:\n"+xmlhttp.responseText);

        var SesTokInfo = true;
        xmlhttp = new XMLHttpRequest();
        if(!SesTokInfo){
        xmlhttp.open("GET", "/api/webserver/token", false);
        }
        else{
        xmlhttp.open("GET", "/api/webserver/SesTokInfo", false);
        }
        xmlhttp.send();
        alert("Token response:\n"+xmlhttp.responseText);
        if(!SesTokInfo){
        var oParser = new DOMParser();
        var oDOM = oParser.parseFromString(xmlhttp.responseText, "text/xml");
        var Token = oDOM.getElementsByTagName("token")[0].childNodes[0].nodeValue;
        }
        else {
        var oParser = new DOMParser();
        var oDOM = oParser.parseFromString(xmlhttp.responseText, "text/xml");
        var Token = oDOM.getElementsByTagName("TokInfo")[0].childNodes[0].nodeValue;
        }
        alert("Token only:\n"+Token);

        xmlhttp = new XMLHttpRequest();
        xmlhttp.open("POST", "/api/security/dmz", false);
        xmlhttp.setRequestHeader("__RequestVerificationToken", Token);
        xmlhttp.setRequestHeader("_ResponseSource", "Browser");
        xmlhttp.setRequestHeader("Content-Type", "text/xml");
        xmlhttp.send("<request><DmzStatus>1</DmzStatus><DmzIPAddress>192.168.8.100</DmzIPAddress></request>");
        alert("Status wlaczenia DMZ:\n"+xmlhttp.responseText);

        xmlhttp = new XMLHttpRequest();
        xmlhttp.open("GET", "/api/security/dmz", false);
        xmlhttp.send();
        alert("Ponownie Status DMZ:\n"+xmlhttp.responseText);
    }
})();
Jest to brzydki kod, ma dużo niepotrzebnych zapytań (do testów), ale w końcu zadziałał i ustawił mój DMZ na "1" dla adresu 192.168.8.100 :)

Użycie:
Po zalogowaniu się na https://192.168.8.1/html/home.html i wejściu w zakładkę "Ustawienia" pojawia się pytanie czy wykonać skrypt. Dalej kolejne alerty ze statusem akcji.

Po zmianie tego, co jest nam potrzebne można po prostu wyłączyć go w ustawieniach Tampermonkey'a.

Myślę, że jest to najprostszy sposób na modemy/routery które wymagają zalogowania się do zmiany ustawień.
szymek2000
Stały użytkownik forum
Posty: 79
Rejestracja: 2014-10-11, 09:42
Lokalizacja: kalisz

Re: HiLink API Huawei - Dyskusja

Post autor: szymek2000 »

Przmus pisze: [ciach]

Zainteresowała mnie część o DMZ, adres: http://192.168.8.1/api/security/dmz
Po otworzeniu w przeglądarce wyświetlało się:

Kod: Zaznacz cały

100003
Ale to dlatego, że byłem niezalogowany. Po zalogowaniu wyglądało to tak:

Kod: Zaznacz cały

0192.168.8.100
Pierwsza cyfra to status tej opcji (wyłączona), a dalej adres IP (pewnie domyślnie ustawiony, ale taki właśnie otrzymuje router główny).

Bawiłem się chwilę żeby zmienić to korzystając z curla, ale w końcu poddałem się. Przyszedł mi na myśl pomysł aby zrobić to z poziomu przeglądarki, już po zalogowaniu. I tak udało mi się stworzyć skrypt dla rozszerzenia Tampermonkey: https://chrome.google.com/webstore/deta ... fkfo?hl=en
O następującej treści:

Kod: Zaznacz cały

// ==UserScript==
// @name         Przemek-Huawei-Post-Request
// @namespace    x
// @version      0.1
// @description  bla bla bla
// @author       Me
// @match        https://192.168.8.1/html/quicksetup.html
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    // Your code here...
    if (confirm('Wykonać skrypt z zapytaniem do routera Huawei?')) {
        var xmlhttp = new XMLHttpRequest();
        xmlhttp.open("GET", "/api/user/state-login", false);
        xmlhttp.send();
        alert("Status zalogowania:\n"+xmlhttp.responseText);

        xmlhttp = new XMLHttpRequest();
        xmlhttp.open("GET", "/api/security/dmz", false);
        xmlhttp.send();
        alert("Status DMZ:\n"+xmlhttp.responseText);

        var SesTokInfo = true;
        xmlhttp = new XMLHttpRequest();
        if(!SesTokInfo){
        xmlhttp.open("GET", "/api/webserver/token", false);
        }
        else{
        xmlhttp.open("GET", "/api/webserver/SesTokInfo", false);
        }
        xmlhttp.send();
        alert("Token response:\n"+xmlhttp.responseText);
        if(!SesTokInfo){
        var oParser = new DOMParser();
        var oDOM = oParser.parseFromString(xmlhttp.responseText, "text/xml");
        var Token = oDOM.getElementsByTagName("token")[0].childNodes[0].nodeValue;
        }
        else {
        var oParser = new DOMParser();
        var oDOM = oParser.parseFromString(xmlhttp.responseText, "text/xml");
        var Token = oDOM.getElementsByTagName("TokInfo")[0].childNodes[0].nodeValue;
        }
        alert("Token only:\n"+Token);

        xmlhttp = new XMLHttpRequest();
        xmlhttp.open("POST", "/api/security/dmz", false);
        xmlhttp.setRequestHeader("__RequestVerificationToken", Token);
        xmlhttp.setRequestHeader("_ResponseSource", "Browser");
        xmlhttp.setRequestHeader("Content-Type", "text/xml");
        xmlhttp.send("<request><DmzStatus>1</DmzStatus><DmzIPAddress>192.168.8.100</DmzIPAddress></request>");
        alert("Status wlaczenia DMZ:\n"+xmlhttp.responseText);

        xmlhttp = new XMLHttpRequest();
        xmlhttp.open("GET", "/api/security/dmz", false);
        xmlhttp.send();
        alert("Ponownie Status DMZ:\n"+xmlhttp.responseText);
    }
})();
[ciach]
u mnie coś nie odpala się ten skrypt
firefox 61.0.2, opcjonalnie jaki musi być to to zmienić? dziękuję za podpowiedz.
Przmus
Stały użytkownik forum
Posty: 98
Rejestracja: 2012-06-02, 03:43
Lokalizacja: Polska

Re: HiLink API Huawei - Dyskusja

Post autor: Przmus »

To spróbuj Tampermonkeyem na Chrome. Nie chce mi się sprawdzać dlaczego na FF nie działa, zwłaszcza, że jest to jednorazowa operacja.
szymek2000
Stały użytkownik forum
Posty: 79
Rejestracja: 2014-10-11, 09:42
Lokalizacja: kalisz

Re: HiLink API Huawei - Dyskusja

Post autor: szymek2000 »

Dla wersji chrome 68.0.3440.106 też nic się nie dzieje, skrypt zapisany, na liście niby aktywny choć w menu widnieje " brak aktywnych skryptów", sama wtyczka aktywna.
Przmus
Stały użytkownik forum
Posty: 98
Rejestracja: 2012-06-02, 03:43
Lokalizacja: Polska

Re: HiLink API Huawei - Dyskusja

Post autor: Przmus »

Sorry za późną odpowiedź. Na pewno odwiedzasz adres: https://192.168.8.1/html/quicksetup.html ?
Jeśli masz inny to w skrypcie trzeba zmienić wedle uznania.
http / https też ma znaczenie.
Ja to robiłem na szybko bo potrzebowałem tylko do jednej operacji, więc nie kładłem nacicku na szczegóły czy wygląd kodu.
tinware
Początkujący użytkownik forum
Posty: 9
Rejestracja: 2018-10-23, 23:38

Re: HiLink API Huawei - Dyskusja

Post autor: tinware »

VipeRsan, jestem pod wrażeniem Twojego artykułu - dzięki serdeczne!

U mnie dziś dwa tematy z E3372h-153.


1. Przekierowanie webservera zawsze na lokalny adres modemu

W pliku:
  • /app/webroot/WebApp/common/config/webserver/config.xml
...zmieniłem:

Kod: Zaznacz cały

<main_page>/html/index.html</main_page>
...na:

Kod: Zaznacz cały

<main_page>/index.html</main_page>

Utworzyłem nowy plik:
  • /app/webroot/WebApp/common/index.html
...i wpisałem do niego:

Kod: Zaznacz cały

<a href="html/index.html">Next...</a>

Wchodząc z lokalnego adresu...
  • 192.168.8.1
...zostaje przekierowany na adres...
  • 192.168.8.1/index.html
...i jest ok


Wchodząc z zewnętrznego adresu
  • X.X.X.X
...zostaje przekierowany na adres...
  • 192.168.8.1/index.html?url=X.X.X.X
...i to nie jest ok!


Mam NATowaną sięć VPN, w której modem 192.168.8.1 przyjmuje w niej inny adres np. 10.0.8.1.
Pomijam oczywiście serie przekierowań w JavaScript, dlatego stworzyłem sobie stronę 192.168.8.1/index.html
Z tego co sprawdziłem, za to przekierowanie odpowiedzialny jest WebServer na modemie.
Jak można zmienić, aby faktycznie robił przekierowanie na "/index.html", zamiast na "192.168.8.1/index.html".



2. Przekierowanie każdego requesta na adres WebUI modemu gdy nie ma Internetu

Gdy podłączamy modem pod USB od razu dostajemy informację - i to jest problem:
Obrazek

Gdy podczas korzystania z Internetu transfer danych zostanie nagle wyłączony, wszystkie strony www przekierowują się na adres modemu - to jest problem.
Obrazek

Przykładowo jak podłącze dwa modemy pod komputer, jeden 192.168.7.1/24, na drugi 192.168.8.1/24 wyłączę transfer danych, to zamiast wychodzić na świat przez pierwszy modem, każdy adres z sieci publicznej przekierowuje mnie na 192.168.8.1 - bez sensu.
Jak można pozbyć się tych przekierowań i automatycznego uruchamiania się przeglądarki ze stroną modemu?
m4jor
Początkujący użytkownik forum
Posty: 6
Rejestracja: 2019-10-12, 12:10

Re: HiLink API Huawei - Dyskusja

Post autor: m4jor »

Cześć mam modowany soft w huawei e3372s-153 HiLink
chcę dograć opcję DDNS, obecnie w WebGui wyskakuje mi błąd
100002 - brak wsparcia w firmware lub błędny adres API
jeśli chodzi o umiejętności progrmaistyczne to nie są za rewelacyjne, soft zmieniony ADB jest
w jaki sposób mogę dograć moduł DDNS?
będę wdzięczny za pomoc!
arsen99
Początkujący użytkownik forum
Posty: 10
Rejestracja: 2019-11-21, 12:14

Re: HiLink API Huawei - Dyskusja

Post autor: arsen99 »

Witam

Dane:
E3372s-153
Update_WEBUI_17.100.13.01.03_HILINK_Mod1.12
E3372h-153_Update_22.333.01.00.00_M_AT_05.10

Próbuję wyciągnąć rożne dane przez api.
Tworzę sobie skrypt w bashu, i go odpalam.
ogólnie nie ma problemu z takim zapytaniem:

Kod: Zaznacz cały

curl  -s -X GET "http://$MODEM_IP/api/webserver/SesTokInfo" > dane.xml
Zapisuje sobie dane do pliku potem pobieram token i sesję i mogę np puścić jakiegoś POST aby zmienić jakiś parametr.

Próbuję zrobić skrypt który będzie wysyłał kod ussd, a potem odbierał dane, np sprawdzał stan konta.
Ogólnie wysłanie się udaje bo jako respond otrzymuje -OK-

Kod: Zaznacz cały

curl  -X POST -d @request.txt "http://$MODEM_IP/api/ussd/send"
- OK

niestety odczytanie wiadomości juz mi się nie udaje:

Kod: Zaznacz cały

curl  -s -X GET "http://$MODEM_IP/api/ussd/get"
W ogóle za każdym razem gdy próbuje pobrać jakieś informacje z API, dostaje ten sam błąd:

Kod: Zaznacz cały

<error>
<code>125002</code>
<message></message>
</error>
nieważne co próbuję:

Kod: Zaznacz cały

curl -X GET "http://$MODEM_IP/api/device/information"
curl -X GET "http://$MODEM_IP/api/net/network"
curl -X GET "http://$MODEM_IP/api/net/net-mode"
itd..
zawsze kończy się tak samo.
Ponieważ ta komenda:

Kod: Zaznacz cały

curl  -s -X GET "http://$MODEM_IP/api/webserver/SesTokInfo"
zwraca mi normalnie w terminalu dane zakładam że inne komendy też powinny, i nie mam pojęcia jak to zrobić. Czy używając innych komend aby pobrać dane muszę jakoś przekazywać obecny token i id sesji? Jeżeli tak to jak to zrobić?

Dzięki za pomoc.
dzejk
Guru bezprzewodowy
Posty: 7187
Rejestracja: 2014-10-17, 14:37
Lokalizacja: internet

Re: HiLink API Huawei - Dyskusja

Post autor: dzejk »

Podejrzyj lub zapytaj tutaj https://eko.one.pl/?p=easyconfig
rmaciej78
Użytkownik forum
Posty: 30
Rejestracja: 2010-01-27, 10:32
Lokalizacja: Poznań

Re: HiLink API Huawei - Dyskusja

Post autor: rmaciej78 »

arsen99 pisze: (...)
Próbuję zrobić skrypt który będzie wysyłał kod ussd, a potem odbierał dane, np sprawdzał stan konta.
Ogólnie wysłanie się udaje bo jako respond otrzymuje -OK-

Kod: Zaznacz cały

curl  -X POST -d @request.txt "http://$MODEM_IP/api/ussd/send"
- OK
(...)
Witam

Próbuję z kolegą zrobić podobny skrypt pod Windows 10 do wysyłania USSD, ale coś nie działa.
Co jest w pliku request.txt?
Pozdrawiam, Maciej.
lukjod
Użytkownik forum
Posty: 38
Rejestracja: 2017-07-01, 09:45

Re: HiLink API Huawei - Dyskusja

Post autor: lukjod »

czy ktos wie jak moge autoryzowac plugin 3ginfo pod openwrt zeby sciagal informacje o polaczeniu z hilinka e5786. Przy poprzednim modemie e5372 dzialalo to z automatu ateraz pokazuje sczatkowe info. Czy ktos uzywa tego modemu z openwrt/gargoyle i moze cos poradzic. Teraz mam takie info:
Obrazek
dzejk
Guru bezprzewodowy
Posty: 7187
Rejestracja: 2014-10-17, 14:37
Lokalizacja: internet

Re: HiLink API Huawei - Dyskusja

Post autor: dzejk »

Masz w miarę nowe openwrt z obsługą ncm 32bit?
https://github.com/torvalds/linux/commi ... 109487dd31
rmaciej78
Użytkownik forum
Posty: 30
Rejestracja: 2010-01-27, 10:32
Lokalizacja: Poznań

Re: HiLink API Huawei - Dyskusja

Post autor: rmaciej78 »

VipeRsan pisze: (...)
I jeszcze jedna uwaga... Token sesji i identyfikator sesji jest często zmieniany. Nie pamiętam w tej chwili konkretnych liczb, ale trzeba mieć to na uwadze. Stare API tokena /api/webserver/token zwykle podawało ten sam numer przez dość długi czas. Nowe API /api/webserver/SesTokInfo za każdym razem podaje inny wynik. Pewnie wynika to z szyfrowania, ale zbyt długo zastanawiając się nad komendami API dość szybko można odkryć, że dostaniemy w wyniku komendy błąd sesji 125002 (przeterminowany SessionID). Dlatego automatyzując działanie skryptów trzeba uwzględnić powyższe uwagi. Np plik wsadowy dla Windowsa można rozwiązać w ten sposób (wymaga narzędzi: curl, grep, cut):

Kod: Zaznacz cały

@ECHO OFF
rem przypisanie zmiennej modIPAdr adresu IP modemu
@SET modIPAdr=192.168.8.1

rem pobranie tokena oraz ID sesji i zapisanie do zmiennych
@curl -s -X GET http://%modIPAdr%/api/webserver/SesTokInfo > tmp.tmp
type tmp.tmp | grep SesInfo | cut -d ^> -f2 | cut -d ^< -f1 > tmp1.tmp
type tmp.tmp | grep TokInfo | cut -d ^> -f2 | cut -d ^< -f1 > tmp2.tmp
@del /A /F tmp.tmp

@SET /p sid= < tmp1.tmp
@del /A /F tmp1.tmp
@SET sid=Cookie: %sid%

@SET /p tok= < tmp2.tmp
@del /A /F tmp2.tmp
@SET tok=__RequestVerificationToken: %tok%

rem pobranie listy sms'ów
@curl -X POST -d "<request><PageIndex>1</PageIndex><ReadCount>20</ReadCount><BoxType>1</BoxType><SortType>0</SortType><Ascending>0</Ascending><UnreadPreferred>0</UnreadPreferred></request>" http://%modIPAdr%/api/sms/sms-list -H "%sid%" -H "%tok%" -H "Content-Type: text/xml"
@pause
Witam

U mnie w routerze 4G 3 Pro B535, ten skrypt zwraca błąd 100003 pod Windows, czyli brak uprawnień.
Co zrobić żeby to działało?
Pozdrawiam, Maciej.
lukjod
Użytkownik forum
Posty: 38
Rejestracja: 2017-07-01, 09:45

Re: HiLink API Huawei - Dyskusja

Post autor: lukjod »

@dzejk
I tu jest dziwna sprawa, bo dziala on jako klient dhcp czyli modem hilink, ale tylko na starszej wersji openwrt od Cezarego z eko.one.pl.
Do swoich buildow dodaje on wszystkie wymagane protokoly ncm, qmi i td. Na najnowszej wersji e5786 nie dziala, moge wejsc przez siec w panel ustawien web ale nie moge wymusic ruchu przez jego modem, po restarcie glownego rutera czasami w ogole go nie widac czasami po jakims czasie zaskakuje ale bez internetu. W tych samych warunkach starszy e5372 dziala idealnie. Dopiero cofniecie sie do openwrt 18.06 pozwolilo na uruchomienie i idealne dzialanie e5786. Zglosilem to do openwrt ale szanse bardzo marne ze ktos sie temu przyjrzy. Jezeli masz chec zobacz moj watek https://eko.one.pl/forum/viewtopic.php?id=20641

U mnie jako glowny ruter na dole w 2 kondygnacyjnym domu robi netgear r7800 podlaczony przez lan z huawei b818 na pietrze (orange lte) a jako dodatkowy przez kabel usb wlasnie teraz e5786 na lte z plusa zony a firewallem netgeara puszcam ruch poszczegolnych urzadzen w sieci przez wybrany modem ze wzgledu na limity i zewnwtrzne ip tylko na orange
ODPOWIEDZ