SNMP lub inna metoda na wyciąganie danych z Funbox 6
Większość firm korzysta z różnych systemów monitorowania urządzeń i systemów - Zabbix, Nagios, etc
Urządzenie i system na nim są tak zamknięte, że w zasadzie nie ma żadnej sensownej metody na automatyczne wyciąganie z niego informacji o parametrach połączenia optycznego , stanu połączenia czy uptime urządzenia.
Przydało by się SNMP lub SSH z ograniczonymi uprawnieniami bądź dowolne API.
maj w Pomysły
1
Otwarty
2
Realizowany
3
Zrealizowany
Nie mam dostępu do Funboxa 6, ale w Funbox 3 da się pewne dane wyciągnąć przez http bez uwierzytelnienia. Odpowiedzi zwracane są w formacie json.
http://192.168.1.1/sysbus/DeviceInfo?_restDepth=-1
Tutaj dane na temat połączenia internetowego, wersja pod linuxa:
curl --silent "http://192.168.1.1/sysbus/NMC:getWANStatus" --data-raw '{"parameters":{}}'
Pojedyncze dane można wyciągnąć z odpowiedzi przez program jq, np. publiczny adres IP:
curl --silent "http://192.168.1.1/sysbus/NMC:getWANStatus" --data-raw '{"parameters":{}}' | jq -r .data.IPAddress
Daj znać czy działa to pod Funbox 6.
Łał, faktycznie DeviceInfo działa jako ładny json, choć zwraca mało przydatne rzeczy (MAC, Serial, wersja softu).
Pozostałe które byłyby istotne (parametry połączenia optycznego) zwracają już niestety 504-kę:
root@iot:~# curl --silent "http://192.168.1.1/sysbus/NMC:getWANStatus" --data-raw '{"parameters":{}}'
<html><head><title>Gateway Timeout</title></head><body><h1>504 - Gateway Timeout</h1></body></html>
root@iot:~# curl --silent "http://192.168.1.1/sysbus/NMC:getWANStatus"
{"error":196618,"description":"Object or parameter not found","info":"NMC:getWANStatus"}
Niemniej - dzięki za to co podrzuciłeś!
A jest dostępna taka strona na Funbox 6, po zalogowaniu: http://192.168.1.1/supportSystemInformationGeneral.html
Może jest pod innym adresem.
Nie, zwraca 404.
Mam wrażenie, że odkąd wrzucili nowy soft to zmieniło się prawie wszystko.
Teraz wszystko jest jakby generowane dynamicznie (jakieś JSy?), URL w przegladarce zawsze zostaje na http://192.168.1.1, narzędzia deweloperskie pokazuja tylko że to co w środku wczytywane jest jako iframe.
Niby dotarłem na przykład do http://192.168.1.1/internal/systemInformation/index.html (wlasnie w konsoli, wczytywany jest jako iframe), ale wywołując go curlem dostaję 307-mke
root@iot:~# curl http://192.168.1.1/internal/systemInformation/index.html
<html><head><title>Temporary Redirect</title></head><body><h1>307 - Temporary Redirect</h1><p>This page has moved to <a href="/">/</a></body></html>
Czyli zapewne żeby w ogóle się do tego dobrać, trzeba by zapewnić obsługę logowania, sesji i... kto wie jeszcze czego.
W narzędziach deweloperskich masz możliwość skopiowania dokładnego żądania dla curla. Później większość nagłówków jak i ciasteczka można z tego zapytania usunąć i sprawdzić czy dostaniesz odpowiedź.
Żądanie DeviceInfo?_restDepth=-1 zwraca dużo więcej informacji po zalogowaniu. Ten skrypt działa na Funbox 3. Wymaga jq do parsowania json.
Trzeba wpisać tam poprawne hasło do funboxa. Pewnie na Funbox 6 nie zadziała, jeżeli tak jak piszesz zmienili mocno oprogramowanie.
#!/bin/sh
contextID=`curl --silent 'http://192.168.1.1/authenticate?username=admin&password=hasloFunbox' -X 'POST' -c /tmp/cookies | jq -r .data.contextID`
curl -v 'http://192.168.1.1/sysbus/DeviceInfo?_restDepth=-1' -H "X-Context: $contextID" -b /tmp/cookies
rm /tmp/cookies
U mnie zwraca takie dane:
No niestety, niezależnie przy symuluję logowanie i sesję czy nie DeviceInfo zwraca tyle samo informacji 😞
Tak jak pisałem, nie mam dostępu do Funboxa 6, więc nie pomogę.
Funbox6 ma wystawiony endpoint /ws który zwraca wszystkie dane wyświetlane w webowym GUI (i prawdopodobnie umożliwia też zarządzanie funboxem czyli zmianę ustawień ale tego nie testowałem).
Najpierw trzeba się autoryzować podając w requeście hasło i pobrać tzw contextID:
curl 'http://192.168.1.1/ws' \
-H 'Authorization: X-Sah-Login' \
--data-raw '{"service":"sah.Device.Information","method":"createContext","parameters":{"applicationName":"webui","username":"admin","password":"TWOJE_HASLO_DO_GUI_FUNBOXA"}}' \
--insecure
Response i pożądany contextID:
Teraz możemy swobodnie odpytywać o konkretne dane np. informacje o WAN podając w headerze contextID (należy go podać w 2 miejscach):
curl 'http://192.168.1.1/ws' \
-H 'Authorization: X-Sah TUTAJ_PODAJ_SWOJ_CONTEXTID' \
-H 'Content-Type: application/x-sah-ws-4-call+json' \
-H 'X-Context: TUTAJ_PODAJ_SWOJ_CONTEXTID' \
--data-raw '{"service":"NMC","method":"getWANStatus","parameters":{}}' \
--insecure
Response:
EDIT: screeny są z Postmana, natomiast jak odpaliłem curl ręcznie to danych czasem było trochę mniej niż w Postmanie nie mam pojęcia czemu
Rzeczywiście - w ten sposób (2x contex) da sie zautoryzować przez CURLa, natomiast jedyne co mi się udało wyciągnac to podstawowe informacje takie jak IP czy status połączenia.
Poległem na wyciągnieciu istotnych danych (siła sygnału optycznego, czas trwania sesji PPPoE itp) 😞
Niewykluczone, że wynika to z mojego braku doświadczenia z analizą działania webgui i budową tego typu requestów. Podtrzymuję to co napisałem - te parametry powinny być we w miarę łatwy sposób dostępne do wyciągniecia z FB6 dla każdego zainteresowanego.
Takie rzeczy po http? A ze względów bezpieczeństwa blokują zmianę DNS. Techniczna patologia. SNMP read only powinno być dostępne do skonfigurowania, np. w wersji 3 z wymuszonymi poświadczeniami i tyle.