HiLink API Huawei - Dyskusja

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

Moderator: Moderatorzy

Awatar użytkownika
VipeRsan
Specjalista bezprzewodowy-junior
Posty: 174
Rejestracja: 2014-11-19, 14:24
Lokalizacja: Tarnów

Re: HiLink API Huawei - Dyskusja

Post autor: VipeRsan »

Nie mam pojęcia :P Może to jest dla routerów LTE/wifi a może ma coś związek z trybem stricte modemowym (HiLink raczej działa w trybie karty sieciowej). Tak czy inaczej wiele funkcji na modemie zwraca błąd 100002 (m.in.: wlan, ddns, dhcp, cradle, voice, diagnosis).
It is I, Leclerc :cfaniak:
Drop z modowanym fw i sw do modemów Huawei >>TU<< (uwaga dostęp może być zablokowany przez Dropa :( )
Dysk Googlowy z modowanym fw i sw do modemów Huawei >>TU<<
Awatar użytkownika
YaHooo
Guru bezprzewodowy
Posty: 17761
Rejestracja: 2008-01-02, 14:38
Lokalizacja: Białystok

Re: HiLink API Huawei - Dyskusja

Post autor: YaHooo »

VipeRsan jestem pełen podziwu za to, że chciało Ci się to wszystko pisać :zdrowko:
Pozdrawiam YaHooo :)
> FAQ < > Limitowanie TTL < > Filtrowanie MAC < > Limit - miniFAQ <
> Udostępnianie połączenia internetowego iPlus w trybie Ad-hoc < > Połączenie Ad-hoc <
(iPlus7GB-30%) + (Sierra Wireless AC881) + (HP Compaq nx7300) + (200m od BTS'a) = (600kB/s)
Awatar użytkownika
VipeRsan
Specjalista bezprzewodowy-junior
Posty: 174
Rejestracja: 2014-11-19, 14:24
Lokalizacja: Tarnów

Re: HiLink API Huawei - Dyskusja

Post autor: VipeRsan »

Spokojnie będą zmiany :P A raczej dodatki bo wraz z WebUI 17 m.in. API tokena się zmienił, a z tego co wstępnie widziałem to jest też moduł bluetooth.
It is I, Leclerc :cfaniak:
Drop z modowanym fw i sw do modemów Huawei >>TU<< (uwaga dostęp może być zablokowany przez Dropa :( )
Dysk Googlowy z modowanym fw i sw do modemów Huawei >>TU<<
gimbus109
Początkujący użytkownik forum
Posty: 11
Rejestracja: 2015-01-30, 06:17
Lokalizacja: Poznań

Re: HiLink API Huawei - Dyskusja

Post autor: gimbus109 »

VipeRsan pisze:Spokojnie będą zmiany :P A raczej dodatki bo wraz z WebUI 17 m.in. API tokena się zmienił, a z tego co wstępnie widziałem to jest też moduł bluetooth.
Do wersji 16 klasa api w pythonie:

API


Działa na wszystkim, na czym można Pythona odpalić :D
Wczesne stadium - wymaga polerki :facepalm:

Aplikacja (AppIndicator dla Unity) jeszcze w powijakach ..... Jak cza spozwoli to wrzucę coś działającego
Pozdrawiam
Awatar użytkownika
VipeRsan
Specjalista bezprzewodowy-junior
Posty: 174
Rejestracja: 2014-11-19, 14:24
Lokalizacja: Tarnów

Re: HiLink API Huawei - Dyskusja

Post autor: VipeRsan »

Lux coś się dzieje w temacie :D Czekam na doszlifowanie apki :)
It is I, Leclerc :cfaniak:
Drop z modowanym fw i sw do modemów Huawei >>TU<< (uwaga dostęp może być zablokowany przez Dropa :( )
Dysk Googlowy z modowanym fw i sw do modemów Huawei >>TU<<
Awatar użytkownika
VipeRsan
Specjalista bezprzewodowy-junior
Posty: 174
Rejestracja: 2014-11-19, 14:24
Lokalizacja: Tarnów

Re: HiLink API Huawei - Dyskusja

Post autor: VipeRsan »

Ok wgrałem zmodowane WebUI 17 do E3372s i jak na razie wszytko działa więc dalej nie wiem z czego wynikały problemy z pobraniem tokena u ruskich... może to coś w fw albo w samym E3372h :/

EDIT:
Ok doczytałem wg rusta nie działa na fw od 22.491.03.*
It is I, Leclerc :cfaniak:
Drop z modowanym fw i sw do modemów Huawei >>TU<< (uwaga dostęp może być zablokowany przez Dropa :( )
Dysk Googlowy z modowanym fw i sw do modemów Huawei >>TU<<
Awatar użytkownika
VipeRsan
Specjalista bezprzewodowy-junior
Posty: 174
Rejestracja: 2014-11-19, 14:24
Lokalizacja: Tarnów

Re: HiLink API Huawei - Dyskusja

Post autor: VipeRsan »

Post o automatycznym PIN przeniesiony do wątku głównego
It is I, Leclerc :cfaniak:
Drop z modowanym fw i sw do modemów Huawei >>TU<< (uwaga dostęp może być zablokowany przez Dropa :( )
Dysk Googlowy z modowanym fw i sw do modemów Huawei >>TU<<
oskar1984snk
Początkujący użytkownik forum
Posty: 1
Rejestracja: 2015-02-26, 13:53
Lokalizacja: Rzeszów

Re: HiLink API Huawei - Dyskusja

Post autor: oskar1984snk »

Witaam potrzebuję pomocy, zlece napisanie skryptu auto restartu modemu w okreslonym interwale np 15 - 30 minut. Chodzi mi o to aby automatycznie zmienaic ip
Awatar użytkownika
VipeRsan
Specjalista bezprzewodowy-junior
Posty: 174
Rejestracja: 2014-11-19, 14:24
Lokalizacja: Tarnów

Re: HiLink API Huawei - Dyskusja

Post autor: VipeRsan »

Przykład 1b lub 1c (w zależności od systemu) punktu 3 w temacie HiLink API dla urządzeń Huawei i dodać skrypt do crona (Linux) lub Harmonogramu zadań (Windows)
It is I, Leclerc :cfaniak:
Drop z modowanym fw i sw do modemów Huawei >>TU<< (uwaga dostęp może być zablokowany przez Dropa :( )
Dysk Googlowy z modowanym fw i sw do modemów Huawei >>TU<<
Awatar użytkownika
VipeRsan
Specjalista bezprzewodowy-junior
Posty: 174
Rejestracja: 2014-11-19, 14:24
Lokalizacja: Tarnów

Re: HiLink API Huawei - Dyskusja

Post autor: VipeRsan »

ja.michal pisze:Patrząc na to wszystko rozumiem, że nie powinno być problemu z napisaniem aplikacji dla modemów hilink na Windowsa, która w trayu pokazywałaby zasięg sieci, informacje czy są jakieś wiadomości; ewentualnie na pasku adresu dokładne parametry połączenia, LAC, CID, itd?
Taka drobna próba. Pisane w Lazarusie (chciałem coś prostego, darmowego i nie mulącego całego systemu jak Visual :P ) więc może nie najmniejszy plik wykonywalny ;) Ale coś tam jest. Jako, że pisane "na kolanie" więc zawiera pewnie pełno błędów i nie ma jakiś wodotrysków w postaci dostosowania do różnego DPI, czy zabezpieczeń przed np. odczytem danych z odłączonego modemu (zresztą nie jestem programistą i nie chce mi się za bardzo myśleć i kombinować) :P

Program pokazuje dymek z parametrami sygnału sieci LTE tj: RSSI, RSRP, RSRQ, SINR wraz ze wskaźnikami jakości w postaci bargrafu (zna ktoś jakiś fajny komponent tego typu z możliwością ustawienia 4 kolorów?), PCI oraz CellID. Tak więc nie nadaje się do połączeń 3G (może jedynie RSSI będzie coś wtedy pokazywało) :P

Wszystkie ustawienia są "z ręki" w pliku ini. Plik ten też trzeba wyedytować jeżeli ma się modem pod adresem innym niż 192.168.8.1.

Chciałem dorobić jeszcze przyciski do restartu modemu i rozłączania/nawiązywania połączenia, ale coś zaczęło się sypać :( Może kiedyś jak znajdę trochę weny twórczej to pomyślę :P
It is I, Leclerc :cfaniak:
Drop z modowanym fw i sw do modemów Huawei >>TU<< (uwaga dostęp może być zablokowany przez Dropa :( )
Dysk Googlowy z modowanym fw i sw do modemów Huawei >>TU<<
ja.michal
*Mistrz bezprzewodowy*
Posty: 22031
Rejestracja: 2006-08-14, 17:59
Lokalizacja: Polska

Re: HiLink API Huawei - Dyskusja

Post autor: ja.michal »

VipeRsan, fajnie. :ok:
Niestety modem mam już od dawna w opcji nie-hilink wsadzony do routera więc osobiście nie mam jak sprawdzić aplikacji.
darekka
Stary wyga bezprzewodowy
Posty: 881
Rejestracja: 2011-11-02, 13:50
Lokalizacja: Łódzkie

Re: HiLink API Huawei - Dyskusja

Post autor: darekka »

Programik fajny i działa prawidłowo z E3372HiLink MOD plus win 8.1x64.
darekka
tosiek
Specjalista bezprzewodowy-junior
Posty: 292
Rejestracja: 2012-03-24, 14:00
Lokalizacja: inąd

Re: HiLink API Huawei - Dyskusja

Post autor: tosiek »

VipeRsan, dziękuję za dokumentację API! Przydała mi się do przełączania opornego modemu HiLink i zmianie go na zwykły.

Przełączanie modemu HiLink w zwykły tryb (port diag i pc ui)
Jeżeli modem po wejściu na poniższe adresy nie zmienia trybu pracy i nie pokazują się nowe urządzenia

Kod: Zaznacz cały

project mode:
http://192.168.1.1/html/switchProjectMode.html
http://192.168.8.1/html/switchProjectMode.html

debug mode:
http://192.168.1.1/html/switchDebugMode.html
http://192.168.8.1/html/switchDebugMode.html 
to WEBUI nie wysyła tokena, który jest wymagany do zmiany tych ustawień. (webui nie współpracuje z obecna wersją oprogramowania). Napisałem skrypt, który pobiera token i przełącza w odpowiedni tryb.

Instrukcja:
  • zacznij od instalacji sterowników stąd: http://www.bez-kabli.pl/viewtopic.php?p=501323#501323
  • instalujemy Mobile Broadband HL Service (ta usługa przełącza HiLinka w systemach windows w tryb karty sieciowej RNDIS) znajduje się na napędzie instalowanym przez modem lub link: http://www.mediafire.com/download/6n64k ... BrServ.zip
  • Pobieramy skrypt: http://www.mediafire.com/download/c3cfv ... itcher.zip (lub z załącznika)
  • Uruchamiamy plik switcher.bat
  • Podłączamy modem i czekamy aż otworzy się przeglądarka. Zapamiętujemy adres modemu.
  • Wracamy do skryptu i wybieramy adres modem (wpisujemy liczbę 1 dla 192.168.1.1 lub 2 dla 192.168.8.1). Enter.
  • Wybieramy tryb przełączenia (liczba 1 lub 2):
    1 - DEVICE_MODE_PROJECT_MODE
    2 - DEVICE_MODE_DEBUG_MODE
    Enter.
    Enter jeżeli widać token (ciąg liczb)
  • Zainstalują się nowe urządzenia (niżej przykład dla project mode):

    Kod: Zaznacz cały

    FC - PC UI Interface - USB\VID_12D1&PID_1442&MI_00
    FC - Application Interface - USB\VID_12D1&PID_1442&MI_01
    
W trybie project mode możemy przełączyć na tryb pracy jak zwykły modem.
Trzeba wysłać polcenie AT na port com urządzenia o nazwie :

Kod: Zaznacz cały

AT^U2DIAG=0
powrót do HiLink:

Kod: Zaznacz cały

AT^U2DIAG=119


W trybie hilink debug można wgrywać oprogramowanie od zwykłego modemu (TCPU) oraz dasboard (UTPS) do obsługi zwykłego modemu. Potrzebne będą sterowniki dostępne wyżej.


źródła:
wget: http://users.ugent.be/~bpuype/wget/
informacje o trybach pracy modemów HiLink: http://tjworld.net/wiki/Huawei/E3131UsbHspa
api webui hilink: http://forum.jdtech.pl/Watek-hilink-api ... zen-huawei
przełączanie w tryb modemu: http://forum.jdtech.pl/Watek-huawei-e31 ... u-na-stale
modyfikacja sterowników: http://4pda.ru/forum/index.php?showtopi ... ry28148805
Ostatnio zmieniony 2015-03-10, 23:07 przez tosiek, łącznie zmieniany 3 razy.
brak podpisu, tak jakby
Awatar użytkownika
VipeRsan
Specjalista bezprzewodowy-junior
Posty: 174
Rejestracja: 2014-11-19, 14:24
Lokalizacja: Tarnów

Re: HiLink API Huawei - Dyskusja

Post autor: VipeRsan »

@tosiek: Huawei zaimplementował zalążek CGI (o czym wspominałem parę postów wcześniej), ale niestety da się wykorzystać go tylko do przełącznia modemu. Plus jest taki, że nie trzeba się martwić o token (odwołanie do funkcji JS, która sama się zatroszczy o token). Minus jest taki, że jest tylko 1 funkcja obsługiwana:
VipeRsan pisze:[ Dodano: 2015-01-30, 10:37 ]
EDIT
Hmmm... ciekawe. Na nowszym E3372h nie działają ponoć API. Ruski rozwiązali to w sposób dość prosty, ale nie do końca zrozumiały. Wysyłają requesty w których odwołują się do funkcji JavaScriptu i ich zmiennymi do adresu 192.168.8.1/CGI.

Request ma budowę (na przykłądzie przełącznika modemu w tryb debug):

Kod: Zaznacz cały

<?xml version="1.0" encoding="UTF-8" ?> 
<api version="1.0">
	<header>
		<function>switchMode</function>
	</header>
	<body>
		<request>
			<switchType>0</switchType> 
		</request>
	</body>
</api>
Plik wsadowy w Windowsie wygląda tak:

Kod: Zaznacz cały

@curl -X POST -d @sw_debug_mode.xml http://192.168.8.1/CGI
@pause
W przekazywanym pliku sw_debug_mode.xml jest powyżej pokazany request.

Z jednej strony duże uproszczenie (nie musimy się martwić o tokeny bo funkcje JS same o niego zadbają), ale z drugiej strony nie wiem jeszcze jak pobrać (GET) parametry :/

EDIT:
Ok po koślawej rozmowie z rustem i forthem wycjhodzi na to że CGI obsługuje tylko switchMode, a wiec przełączanie w tryb debug :|
It is I, Leclerc :cfaniak:
Drop z modowanym fw i sw do modemów Huawei >>TU<< (uwaga dostęp może być zablokowany przez Dropa :( )
Dysk Googlowy z modowanym fw i sw do modemów Huawei >>TU<<
Awatar użytkownika
COVERek
Stały użytkownik forum
Posty: 93
Rejestracja: 2008-07-10, 20:23
Lokalizacja: Łódź

Re: HiLink API Huawei - Dyskusja

Post autor: COVERek »

Jak uaktywnić ADB w modemie, bo nie moge wygooglowac... :/
Linux User #462372 || Ubuntu User #20118
Awatar użytkownika
VipeRsan
Specjalista bezprzewodowy-junior
Posty: 174
Rejestracja: 2014-11-19, 14:24
Lokalizacja: Tarnów

Re: HiLink API Huawei - Dyskusja

Post autor: VipeRsan »

Najprościej? Wgrać oprogramowanie zawierające odblokowane ADB :P

Droga trudniejsza... pfff nie testowana, ale o ile dobrze zrozumiałem to co jest na 4pda dla modemu E3372s (dla innych modemów może być inaczej, a na pewno jest inaczej dla E3372h) polega na:

!!!UWAGA!!!: metoda nie testowana i nie odpowiadam, jak modem po zastosowaniu niniejszej instrukcji zostanie cegiełką!!!
  1. Odblokować powłokę linuxową "A" (istnieje jeszcze powłoka "C" systemu VxWorks) za pomocą:

    Kod: Zaznacz cały

    AT^SPWORD="hasło"
    AT^SHELL=2
    AT^RESET
    Gdzie hasło to kod wygenerowany algorytmem 201 z odwrotnego IMEI (wpisanego od ostatniej do pierwszej cyfry). Powinno to odblokować 6 portów szeregowych w linuxie widzianych jako ttyUSB0 do ttyUSB5, gdzie 0 - to konsola AT, 1 - konsola VxWorks, 2 - konsola Linuxa, 5 - log DSP(?)

    Do tych komend może być potrzebne odblokowane najpierw zaawansowanych funkcji AT za pomocą:

    Kod: Zaznacz cały

    AT^DATALOCK="hasło1"
    gdzie hasło1 to kod wygenerowany za pomocą algorytmu 201 z IMEI.
  2. W konsoli Linuxa odpalamy ADB:

    Kod: Zaznacz cały

    /sbin/adbd
  3. Teraz możemy połaczyć się z modemem po ADB:

    Kod: Zaznacz cały

    adb connect 192.168.8.1
    adb remount
    adb shell
  4. I edytujemy plik /system/etc/autorun.sh robimy to za pomocą edytora vi uruchamiając go w sposób:

    Kod: Zaznacz cały

    busybox vi /etc/autorun.sh
    i dodajemy na końcu pliku:

    Kod: Zaznacz cały

    /sbin/adbd &
    lub nie znajac vi możemy użyć:

    Kod: Zaznacz cały

    echo "/sbin/adbd &" >>/system/etc/autorun.sh
    W tym miejscu można również od razu uruchomić demona telnet dodając do autoruna:

    Kod: Zaznacz cały

    busybox telnetd -l /system/bin/sh
O ile nie napisali tego na forum ruskim przy tej instrukcji, to z doświadczenia wiem, że do edycji plików trzeba odblokować do zapisu daną partycję. W tym celu zaraz po połączeniu się za pomocą ADB sprawdzamy stan partycji /system poleceniem:

Kod: Zaznacz cały

mount
co wypluje:

Kod: Zaznacz cały

rootfs / rootfs rw,relatime 0 0
/dev/block/mtdblock12 /modem_log yaffs2 rw,relatime 0 0
/dev/block/mtdblock17 /online yaffs2 rw,relatime 0 0
/dev/block/mtdblock3 /mnvm2:0 yaffs2 rw,relatime 0 0
tmpfs /dev tmpfs rw,relatime,mode=755 0 0
devpts /dev/pts devpts rw,relatime,mode=600 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
none /acct cgroup rw,relatime,cpuacct 0 0
tmpfs /mnt/asec tmpfs rw,relatime,mode=755,gid=1000 0 0
tmpfs /mnt/obb tmpfs rw,relatime,mode=755,gid=1000 0 0
none /dev/cpuctl cgroup rw,relatime,cpu 0 0
/dev/block/mtdblock15 /system yaffs2 ro,relatime 0 0
/dev/block/mtdblock16 /data yaffs2 rw,relatime 0 0
/dev/block/mtdblock13 /app yaffs2 ro,relatime 0 0
/dev/block/mtdblock14 /app/webroot jffs2 ro,relatime 0 0
/dev/block/mtdblock18 /root yaffs2 rw,relatime 0 0
Jak widać /system jest tylko do odczytu (ro) na urządzeniu /dev/block/mtdblock15

Robimy więc przemontowanie do zapisu:

Kod: Zaznacz cały

mount -o remount,rw /dev/block/mtdblock15 /system
Po zakończonych zmianach z powrotem przywracamy tylko do odczytu:

Kod: Zaznacz cały

mount -o remount,ro /dev/block/mtdblock15 /system
EDIT:
Wpisania pierwszych komend AT trzeba modem przełączyć w tryb debug za pomocą wejścia pod adres modemu: http://192.168.8.1/html/switchDebugMode.html
Co również odblokuje parę portów szeregowych, z czego jeden będzie portem AT.

Oczywiście instrukcja jest dla modemu E3372s typu HiLink.
It is I, Leclerc :cfaniak:
Drop z modowanym fw i sw do modemów Huawei >>TU<< (uwaga dostęp może być zablokowany przez Dropa :( )
Dysk Googlowy z modowanym fw i sw do modemów Huawei >>TU<<
penknife
Stały użytkownik forum
Posty: 92
Rejestracja: 2014-06-12, 06:30
Lokalizacja: G-cko

Re: HiLink API Huawei - Dyskusja

Post autor: penknife »

do VipeRsan oraz osób mogących testować API:
czy skrypty JS przy korzystaniu z API HiLink nie wysyłają po cichu referer URL (adresu strony, która wykonuje zapytanie)?
Awatar użytkownika
VipeRsan
Specjalista bezprzewodowy-junior
Posty: 174
Rejestracja: 2014-11-19, 14:24
Lokalizacja: Tarnów

Re: HiLink API Huawei - Dyskusja

Post autor: VipeRsan »

Tzn? Bo nie bardzo rozumiem co rozumiesz pod "referer URL (adresu strony, która wykonuje zapytanie)"? Możesz jaśniej albo podać jakiś przykład?
It is I, Leclerc :cfaniak:
Drop z modowanym fw i sw do modemów Huawei >>TU<< (uwaga dostęp może być zablokowany przez Dropa :( )
Dysk Googlowy z modowanym fw i sw do modemów Huawei >>TU<<
penknife
Stały użytkownik forum
Posty: 92
Rejestracja: 2014-06-12, 06:30
Lokalizacja: G-cko

Re: HiLink API Huawei - Dyskusja

Post autor: penknife »

Jako przykład mogę podać TP-Link MR-3420 v2, gdzie w nowszym oprogramowaniu przy zapytaniu rozłączającym/łączącym modem 3G/4G należy dodać do argumentów wget/curl adres strony, która to zleciła, ażeby ktoś/coś niepowołany nie miał możliwości wykonania polecenia. Wówczas taki wpis wygląda mniej więcej tak:

Kod: Zaznacz cały

wget --referer http://adres_routera/ścieżka_strony_wywołującej --user Nazwa_Użytkownika --password Hasło_Uzytkownika http://adres_routera/ścieżka_polecenia
Jeśli tuż za wget wstawisz "-d" zostaną wypisane przyjmowane argumenty.
"http://adres_routera/ścieżka_strony_wywołującej" -pełny adres strony, na której nastąpiło np. kliknięcie na przycisk/łącze połącz/rozłącz/reset.

Jeśli już kolega rozpisał API HiLink-ów, dobrze by było zerknąć czy właśnie dodatkowo nie lecą do modemu jakieś adresy referer z JS w nagłówku zapytania (może tu tkwić problem z uzyskaniem tokena z konsoli w nowszych wersjach API).
Awatar użytkownika
VipeRsan
Specjalista bezprzewodowy-junior
Posty: 174
Rejestracja: 2014-11-19, 14:24
Lokalizacja: Tarnów

Re: HiLink API Huawei - Dyskusja

Post autor: VipeRsan »

Nie referery nie są potrzebne w HiLink API. Przynajmniej nie zauważyłem ich potrzeby. W pierwotnym opisie jaki zrobiłem bazując na opisie Chaddy'ego były wykorzystywane refy w np w SMSach, ale jak przeglądnąłem JS i sprawdziłem u siebie okazało się, że nie trzeba ich stosować.

Niestety nie mam modemu który używa nowszego oprogramowania (chodzi o firmware, a nie WebUI), więc nie sprawdzę co jest problemem.

Zresztą poniżej masz kod JS z API WebUI w wersji 17 pobierający dane:

Kod: Zaznacz cały

// urlstr : URL of the Restful interface.
// callback_func : Callback function to handle response, this callback function
// have one parameter
// callback_func($xml) - $xml : a jQuery XML object which is successfully get
// from getAjaxData.
// options.sync
// options.timout
// options.errorCB
function getAjaxData(urlstr, callback_func, options) {
    var myurl = AJAX_HEADER + urlstr + AJAX_TAIL;
    var isAsync = true;
    var nTimeout = AJAX_TIMEOUT;
    var errorCallback = null;

    if (options) {
        if (options.sync) {
            isAsync = (options.sync == true) ? false : true;
        }
        if (options.timeout) {
            nTimeout = parseInt(options.timeout, 10);
            if (isNaN(nTimeout)) {
                nTimeout = AJAX_TIMEOUT;
            }

        }
        errorCallback = options.errorCB;
    }

    var headers = {};
    if(!($.isArray(g_requestVerificationToken))) {
        headers['__RequestVerificationToken'] = g_requestVerificationToken;
    }

    $.ajax({
        async: isAsync,
        headers: headers,
        //cache: false,
        type: 'GET',
        timeout: nTimeout,
        url: myurl,
        //dataType: ($.browser.msie) ? "text" : "xml",
        error: function(XMLHttpRequest, textStatus) {
            try {
                if (jQuery.isFunction(errorCallback)) {
                    errorCallback(XMLHttpRequest, textStatus);
                }
                log.error('MAIN : getAjaxData(' + myurl + ') error.');
                log.error('MAIN : XMLHttpRequest.readyState = ' + XMLHttpRequest.readyState);
                log.error('MAIN : XMLHttpRequest.status = ' + XMLHttpRequest.status);
                log.error('MAIN : textStatus ' + textStatus);
            } catch (exception) {
                log.error(exception);
            }
        },
        success: function(data) {
            log.debug('MAIN : getAjaxData(' + myurl + ') sucess.');
            log.trace(data);
            var xml;
            if (typeof data == 'string' || typeof data == 'number') {
                if((-1 != this.url.indexOf('/api/ussd/get') )&&( -1 != data.indexOf("content"))) {
                    data = smsContentDeleteWrongChar(data);
                }
                if (!window.ActiveXObject) {
                    var parser = new DOMParser();
                    xml = parser.parseFromString(data, 'text/xml');
                } else {
                    //IE
                    xml = new ActiveXObject('Microsoft.XMLDOM');
                    xml.async = false;
                    xml.loadXML(data);
                }
            } else {
                xml = data;
            }
            var ret = xml2object($(xml));
            if('error' == ret.type) {
                if(ERROR_WRONG_SESSION_TOKEN == ret.error.code) {
                    log.error('Main: getajax'+ this.url +'session token error');
                    gotoPageWithoutHistory(HOME_PAGE_URL);
                    return;
                }

                if(ERROR_WRONG_SESSION == ret.error.code) {
                    log.error('Main: getajax'+ this.url +'session  error');
                    gotoPageWithoutHistory(HOME_PAGE_URL);
                    return;
                }
            }
            if('error' == ret.type && ERROR_WRONG_TOKEN == ret.error.code) {
                getAjaxToken();
                getAjaxData(urlstr, callback_func, options);
            } else if (typeof callback_func == 'function') {
                callback_func($(xml));
            } else {
                log.error('callback_func is undefined or not a function');
            }
        }
    });
}
I zapisujace dane:

Kod: Zaznacz cały

// urlstr : URL of the Restful interface.
// xml: xml string to be submit to server.
// callback_func : Callback function to handle response, this callback function
// have one parameter
// callback_func($xml) - $xml : a jQuery XML object which is successfully get
// from getAjaxData.
// options.sync
// options.timout
// options.errorCB
function saveAjaxData(urlstr, xmlDate, callback_func, options) {
    var myurl = AJAX_HEADER + urlstr + AJAX_TAIL;
    var isAsync = true;
    var nTimeout = AJAX_TIMEOUT;
    var errorCallback = null;

    if (options) {
        if (options.sync) {
            isAsync = (options.sync == true) ? false : true;
        }
        if (options.timeout) {
            nTimeout = parseInt(options.timeout, 10);
            if (isNaN(nTimeout)) {
                nTimeout = AJAX_TIMEOUT;
            }
        }
        errorCallback = options.errorCB;
    }

    var headers = {};
    if($.isArray(g_requestVerificationToken)) {
        if(g_requestVerificationToken.length > 0) {
            headers['__RequestVerificationToken'] = g_requestVerificationToken[0];
            g_requestVerificationToken.splice(0, 1);
        } else {
            setTimeout( function () {
                saveAjaxData(urlstr, xmlDate, callback_func, options);
            }, 50);
            return;
        }

    } else {
        headers['__RequestVerificationToken'] = g_requestVerificationToken;
    }

    $.ajax({
        async: isAsync,
        headers: headers,
        //cache: false,
        type: 'POST',
        timeout: nTimeout,
        url: myurl,
        // dataType: ($.browser.msie) ? "text" : "xml",
        data: xmlDate,
        error: function(XMLHttpRequest, textStatus) {
            try {
                if("12030" == XMLHttpRequest.status || "12031" == XMLHttpRequest.status || "12019" == XMLHttpRequest.status || "400" == XMLHttpRequest.status) {
                    saveAjaxData(urlstr, xmlDate, callback_func, options);
                    return;
                } else if(jQuery.isFunction(errorCallback)) {
                    errorCallback(XMLHttpRequest, textStatus);
                }
                log.error('MAIN : saveAjaxData(' + myurl + ') error.');
                log.error('MAIN : XMLHttpRequest.readyState = ' + XMLHttpRequest.readyState);
                log.error('MAIN : XMLHttpRequest.status = ' + XMLHttpRequest.status);
                log.error('MAIN : textStatus' + textStatus);
            } catch (exception) {
                log.error(exception);
            }
        },
        success: function(data) {
            log.debug('MAIN : saveAjaxData(' + myurl + ') success.');
            log.trace(data);
            var xml;
            if (typeof data == 'string') {
                if (-1 != this.url.indexOf('/api/sms/sms-list') && -1 != data.indexOf('Messages')) {
                    data = smsContentDeleteWrongChar(data);
                }
                if (!window.ActiveXObject) {
                    var parser = new DOMParser();
                    xml = parser.parseFromString(data, 'text/xml');
                } else {
                    //IE
                    xml = new ActiveXObject('Microsoft.XMLDOM');
                    xml.async = false;
                    xml.loadXML(data);
                }
            } else {
                xml = data;
            }
            var xml_ret = xml2object($(xml));
            if(typeof xml_ret.error != 'undefined' && -1 == this.url.indexOf('/api/user/session')) {
                if(xml_ret.error.code == ERROR_SYSTEM_NO_RIGHTS && current_href != "home") {
                    gotoPageWithoutHistory(HOME_PAGE_URL);
                    return;
                }
                if(ERROR_VOICE_BUSY == xml_ret.error.code) {
                    gotoPageWithoutHistory(VOICE_BUSY_URL);
                    return;
                }

                if(ERROR_WRONG_TOKEN == xml_ret.error.code) {
                    getAjaxToken();
                    saveAjaxData(urlstr, xmlDate, callback_func, options);
                    return;
                }

                if(ERROR_WRONG_SESSION_TOKEN == xml_ret.error.code) {
                    log.error('Main: saveAjaxDate'+ this.url +'session token error');
                    gotoPageWithoutHistory(HOME_PAGE_URL);
                    return;
                }

                if(ERROR_WRONG_SESSION == xml_ret.error.code) {
                    log.error('Main: saveAjaxDate'+ this.url +'session  error');
                    gotoPageWithoutHistory(HOME_PAGE_URL);
                    return;
                }
            } else if(isAjaxReturnOK(xml_ret) && -1 != this.url.indexOf('/api/user/login')) {
                log.debug('Main: login success, empty token list');
                if($.isArray(g_requestVerificationToken)) {
                    g_requestVerificationToken = [];
                }
            }

            if (typeof callback_func == 'function') {
                callback_func($(xml));
            } else {
                log.error('callback_func is undefined or not a function');
            }
        },
        complete: function(XMLHttpRequest, textStatus) {
            var headers = XMLHttpRequest.getAllResponseHeaders();
            if(headers.indexOf('__RequestVerificationTokenone') > 0) {
                g_requestVerificationToken.push(getTokenFromHeader(headers, '__RequestVerificationTokenone'));
                if(headers.indexOf('__RequestVerificationTokentwo') > 0) {
                    g_requestVerificationToken.push(getTokenFromHeader(headers, '__RequestVerificationTokentwo'));
                }
            } else if(headers.indexOf('__requestverificationtokenone') > 0) {
                g_requestVerificationToken.push(getTokenFromHeader(headers, '__requestverificationtokenone'));
                if(headers.indexOf('__requestverificationtokentwo') > 0) {
                    g_requestVerificationToken.push(getTokenFromHeader(headers, '__requestverificationtokentwo'));
                }
            } else if(headers.indexOf('__RequestVerificationToken') > 0) {
                g_requestVerificationToken.push(getTokenFromHeader(headers, '__RequestVerificationToken'));
            } else if(headers.indexOf('__requestverificationtoken') > 0) {
                g_requestVerificationToken.push(getTokenFromHeader(headers, '__requestverificationtoken'));
            } else {
                log.error('MAIN: saveAjaxData can not get response token');
            }
        }
    });
}
Pobranie tokena to odwołanie się do funkcji Get z odpowiednim adresem API:

Kod: Zaznacz cały

function getAjaxToken() {
    var meta = $("meta[name=csrf_token]");
    var i = 0;

    if(meta.length > 0) {
        g_requestVerificationToken = [];
        for(i; i < meta.length; i++) {
            g_requestVerificationToken.push(meta[i].content);
        }
    } else {
        getAjaxData('api/webserver/token', function($xml) {
            var ret = xml2object($xml);
            if ('response' == ret.type) {
                g_requestVerificationToken = ret.response.token;
            }
        }, {
            sync: true
        });
    }
}
A tu przykładowo jedna z mniejszych funkcji czyli switch_mode przełączająca modem w tryb debug/project:

Kod: Zaznacz cały

function switch_mode(value)
{
    var request = {
        mode: value    
    };
    
    var xmlstr = object2xml("request", request);
    saveAjaxData("api/device/mode", xmlstr, function($xml){
        var ret = xml2object($xml);
        if (isAjaxReturnOK(ret)) 
        {
            closeWindow();
        }
        
    }); 
}

Ja tu nigdzie nie widzę potrzeby referera, ale mogę się mylić tym bardziej, że nie zagłębiałem się w dokumentację jquery.

CGI jest zaimplementowane, ale da się wykorzystać tylko jedną funkcję switch_mode, gdzie wykorzystywana jest powyższa funkcja Send, która jak widać sama troszczy się o token.
It is I, Leclerc :cfaniak:
Drop z modowanym fw i sw do modemów Huawei >>TU<< (uwaga dostęp może być zablokowany przez Dropa :( )
Dysk Googlowy z modowanym fw i sw do modemów Huawei >>TU<<
penknife
Stały użytkownik forum
Posty: 92
Rejestracja: 2014-06-12, 06:30
Lokalizacja: G-cko

Re: HiLink API Huawei - Dyskusja

Post autor: penknife »

czytając powyższy kod:
1) ciekawe co zawiera zmienna: AJAX_HEADER
2) ciekawe z czym się je tokeny :__RequestVerificationTokenone i __RequestVerificationTokentwo
Awatar użytkownika
VipeRsan
Specjalista bezprzewodowy-junior
Posty: 174
Rejestracja: 2014-11-19, 14:24
Lokalizacja: Tarnów

Re: HiLink API Huawei - Dyskusja

Post autor: VipeRsan »

penknife pisze:czytając powyższy kod:
1) ciekawe co zawiera zmienna: AJAX_HEADER
Nic ciekawego. Zdefiniowana jest jako:

Kod: Zaznacz cały

var AJAX_HEADER = '../';
penknife pisze:2) ciekawe z czym się je tokeny :__RequestVerificationTokenone i __RequestVerificationTokentwo
Najstarsi górale nie wiedzą :P Ale raczej nie jest to związane z problemem.

Z tego co udało mi się zorientować pobranie tokena na nowym oprogramowaniu wskazuje na nowy błąd nr 125002, która to wartość wskazuje na zmienną ERROR_WRONG_SESSION co wskazywałoby znowu pfff... utratę logowania (przynajmniej jedynie co i się kojarzy to api/user/session, ale tego nie sprawdzi na starszym oprogramowaniu)? I jeśli tak to jaki miałby być ten login? Na pewno część tego nowego API to /api/user/login, ale na razie nie zagłębiałem się aż tak bardzo w zmiany. Może kiedyś jak znajdę trochę więcej wolnego czasu :P

Kolejną nową zmienną błędu nr 125003 jest ERROR_WRONG_SESSION_TOKEN... ciekawe czym się to miałoby różnić od błędu nr 125001 - ERROR_WRONG_TOKEN.
It is I, Leclerc :cfaniak:
Drop z modowanym fw i sw do modemów Huawei >>TU<< (uwaga dostęp może być zablokowany przez Dropa :( )
Dysk Googlowy z modowanym fw i sw do modemów Huawei >>TU<<
penknife
Stały użytkownik forum
Posty: 92
Rejestracja: 2014-06-12, 06:30
Lokalizacja: G-cko

Re: HiLink API Huawei - Dyskusja

Post autor: penknife »

Zamiast szukać tego w kodzie JS, można by po prostu podsłuchać jak przeglądarka rozmawia z modemem.
Awatar użytkownika
VipeRsan
Specjalista bezprzewodowy-junior
Posty: 174
Rejestracja: 2014-11-19, 14:24
Lokalizacja: Tarnów

Re: HiLink API Huawei - Dyskusja

Post autor: VipeRsan »

Potrzeba do tego modemu z oprogramowaniem na którym nie można odczytać tokena (i każdego innego API), bo raczej nie ma sensu podsłuchiwać modemu który nie ma zabezpieczonego API.
It is I, Leclerc :cfaniak:
Drop z modowanym fw i sw do modemów Huawei >>TU<< (uwaga dostęp może być zablokowany przez Dropa :( )
Dysk Googlowy z modowanym fw i sw do modemów Huawei >>TU<<
Awatar użytkownika
VipeRsan
Specjalista bezprzewodowy-junior
Posty: 174
Rejestracja: 2014-11-19, 14:24
Lokalizacja: Tarnów

Re: HiLink API Huawei - Dyskusja

Post autor: VipeRsan »

Prawdopodobnie rozwiązaniem problemu nowszego softu, gdzie nie da się pobrać tokena i występuje błąd sesji rozwiązaniem jest api/webserver/SesTokInfo. Przynajmniej na tyle, na ile udało mi się ustalić z Cezarym.
It is I, Leclerc :cfaniak:
Drop z modowanym fw i sw do modemów Huawei >>TU<< (uwaga dostęp może być zablokowany przez Dropa :( )
Dysk Googlowy z modowanym fw i sw do modemów Huawei >>TU<<
kolopeter
Początkujący użytkownik forum
Posty: 16
Rejestracja: 2009-10-27, 20:00
Lokalizacja: szczecin

Re: HiLink API Huawei - Dyskusja

Post autor: kolopeter »

witam.
Jak wygenerować kod algorytmem 201?
ja akurat bawie się modemem e8278s-602, ale zasada taka sama pewnie jak tu.
Ogólnie chcę uruchomić ussd. uruchomiłem funkcje typu diagnostyka, zapisywanie configa, język, ale niestety ussd nie jest w stanie wysłać zapytania,każde z błędem. Operuje na firmwarze z otwartym juz telnetem, przerobionym przez rosjan,ale chciałbym spróbować na firmwarze i webui od anglikow. Może tam jest mniej namieszane...
Chyba ,ze ktoś wie jak dobrać się do firmware , tak jak robią to Rosjanie.
edit:
czy to nie przez przypadek nowy algorytm dla huawei, tylko ,ze imei wpisujemy od konca ?
Awatar użytkownika
VipeRsan
Specjalista bezprzewodowy-junior
Posty: 174
Rejestracja: 2014-11-19, 14:24
Lokalizacja: Tarnów

Re: HiLink API Huawei - Dyskusja

Post autor: VipeRsan »

USSD wysyłasz na 3G czy LTE? Na LTE USSD nie zadziała. Musisz mieć albo tryb "preferowane LTE" (LTE->3G), albo po prostu 3G.

Co do algorytmu v201 to kalkulator stworzył forth32@4pda ew na moim dropie.

v201 z odwrotnego IMEI (wpisanego od końca) służy w E3372s do odblokowania konsoli A. v201 z normalnie wpisanego IMEI służy w E3372s do odblokowania zaawansowanych komend AT.
It is I, Leclerc :cfaniak:
Drop z modowanym fw i sw do modemów Huawei >>TU<< (uwaga dostęp może być zablokowany przez Dropa :( )
Dysk Googlowy z modowanym fw i sw do modemów Huawei >>TU<<
kolopeter
Początkujący użytkownik forum
Posty: 16
Rejestracja: 2009-10-27, 20:00
Lokalizacja: szczecin

Re: HiLink API Huawei - Dyskusja

Post autor: kolopeter »

no niestety .. sprobowalem kazda kombinacje z numerami z odwrotnego imeia i normalnego .
AT^DATALOCK="hasło1" wchodzi numer v2 z komunikatem ok, AT^SPWORD="hasło" zas kazdy z errorem. AT^SHELL=2 nie wchodzi , ale za to wchodzi 0 i 1. tez czytam rosyjskie fora ,ale w zasadzie wszystko wraca do ww komend i http://192.168.1.1/html/switchDebugMode.html , ktore zamyka mi przegladarke (IE i firefoxa, ale opery nie zamyka) bez komuniaktu. ech , jakies pomysly ?
rozlozenie firmware- poleglem :)
xyy333
Stały użytkownik forum
Posty: 90
Rejestracja: 2008-12-03, 20:06
Lokalizacja: Gdańsk

Re: HiLink API Huawei - Dyskusja

Post autor: xyy333 »

Vipersan, na twoim Dropie w aplikacji na windows jest virus - virustotal daje 20/50
danish1162
Początkujący użytkownik forum
Posty: 2
Rejestracja: 2015-05-01, 15:08
Lokalizacja: pakistan

Re: HiLink API Huawei - Dyskusja

Post autor: danish1162 »

sir script is not working please help me regarding e5377
tosiek pisze:VipeRsan, dziękuję za dokumentację API! Przydała mi się do przełączania opornego modemu HiLink i zmianie go na zwykły.

Przełączanie modemu HiLink w zwykły tryb (port diag i pc ui)
Jeżeli modem po wejściu na poniższe adresy nie zmienia trybu pracy i nie pokazują się nowe urządzenia

Kod: Zaznacz cały

project mode:
http://192.168.1.1/html/switchProjectMode.html
http://192.168.8.1/html/switchProjectMode.html

debug mode:
http://192.168.1.1/html/switchDebugMode.html
http://192.168.8.1/html/switchDebugMode.html 
to WEBUI nie wysyła tokena, który jest wymagany do zmiany tych ustawień. (webui nie współpracuje z obecna wersją oprogramowania). Napisałem skrypt, który pobiera token i przełącza w odpowiedni tryb.

Instrukcja:
  • zacznij od instalacji sterowników stąd: http://www.bez-kabli.pl/viewtopic.php?p=501323#501323
  • instalujemy Mobile Broadband HL Service (ta usługa przełącza HiLinka w systemach windows w tryb karty sieciowej RNDIS) znajduje się na napędzie instalowanym przez modem lub link: http://www.mediafire.com/download/6n64k ... BrServ.zip
  • Pobieramy skrypt: http://www.mediafire.com/download/c3cfv ... itcher.zip (lub z załącznika)
  • Uruchamiamy plik switcher.bat
  • Podłączamy modem i czekamy aż otworzy się przeglądarka. Zapamiętujemy adres modemu.
  • Wracamy do skryptu i wybieramy adres modem (wpisujemy liczbę 1 dla 192.168.1.1 lub 2 dla 192.168.8.1). Enter.
  • Wybieramy tryb przełączenia (liczba 1 lub 2):
    1 - DEVICE_MODE_PROJECT_MODE
    2 - DEVICE_MODE_DEBUG_MODE
    Enter.
    Enter jeżeli widać token (ciąg liczb)
  • Zainstalują się nowe urządzenia (niżej przykład dla project mode):

    Kod: Zaznacz cały

    FC - PC UI Interface - USB\VID_12D1&PID_1442&MI_00
    FC - Application Interface - USB\VID_12D1&PID_1442&MI_01
    
W trybie project mode możemy przełączyć na tryb pracy jak zwykły modem.
Trzeba wysłać polcenie AT na port com urządzenia o nazwie :

Kod: Zaznacz cały

AT^U2DIAG=0
powrót do HiLink:

Kod: Zaznacz cały

AT^U2DIAG=119


W trybie hilink debug można wgrywać oprogramowanie od zwykłego modemu (TCPU) oraz dasboard (UTPS) do obsługi zwykłego modemu. Potrzebne będą sterowniki dostępne wyżej.


źródła:
wget: http://users.ugent.be/~bpuype/wget/
informacje o trybach pracy modemów HiLink: http://tjworld.net/wiki/Huawei/E3131UsbHspa
api webui hilink: http://forum.jdtech.pl/Watek-hilink-api ... zen-huawei
przełączanie w tryb modemu: http://forum.jdtech.pl/Watek-huawei-e31 ... u-na-stale
modyfikacja sterowników: http://4pda.ru/forum/index.php?showtopi ... ry28148805
ODPOWIEDZ