[AKTUALIZACJA: Stan na 04.06, 8:00 – Konkurs rozwiązany!]
Hasło po wyzerowaniu licznika to: Brawo, jesteś wojownikiem, który wygrał z miernikiem
Pierwszy konkurs Władcy Sieci właśnie się rozpoczyna!
Tak jak obiecywaliśmy w trakcie premierowego Webinaru Władcy Sieci, przesyłamy długo oczekiwany konkurs!
Zapoznajcie się z zasadami i ruszajcie wykonać pierwszą misję. Powodzenia!
Smart metering challenge
W dobie wszechobecnych technologii smart, coraz większą popularnością cieszą się tzw. urządzenia smart gas-metering. Licznik gazu zamontowany w mieszkaniu lub domu prywatnym doposażony zostaje w dedykowane urządzenie potrafiące na bieżąco odczytywać wskazania zużycia, a następnie cyklicznie wysyłać jest do dostawcy usług.
Odbiorca paliwa również otrzymuje dodatkowe korzyści, dzięki szczegółowym dziennym statystykom jest w stanie efektywnie analizować poziom kosztów zużycia gazu w zależności od pory roku, temperatury wewnątrz lokalu, czasu gotowania posiłków.
Uproszczona architektura systemu smart
gas-metering składa się z następujący komponentów:
- sensora odczytującego stan licznika wraz z modułem komunikacyjnym GSM/Wifi,
- infrastruktury operatora pobierającej przesyłane z sensora informacje oraz udostępniającej je do dalszej analizy,
- aplikacji WWW umożliwiającej klientowi oraz operatorowi analizować dane / wyliczać należności / wystawiać faktury.
Zadanie dla uczestników:
Pod adresem http://gas-challenge.herokuapp.com/ umieszczona jest usługa stanowiąca element symulowanej infrastruktury dostawcy gazu. Należy sprawić, aby Jan Kowalski – nie zapłacił w tym roku za gaz ani grosza. Zima była ciężka, a z powodu pandemii, dalej wcale nie jest łatwo. Wygrywa osoba, która jako pierwsza prześle hasło potwierdzające poprawne rozwiązanie zadania na adres info@wladcysieci.pl.
Poszczególne kroki zadania:
- Włam się do wartości z miernika
- Wyzeruj dane
- Na adres info@wladcysieci.pl prześlij hasło, które pojawiło się po wyzerowaniu licznika
Nagrodą główną jest bezprzewodowy głośnik
Creative Sound Blaster Free.
Uwaga wygrywa pierwszy użytkownik portalu, który prześle hasło na info@wladcysieci.pl!
Jeżeli zadanie nie jest tak łatwe, jak się
na pierwszy rzut oka wydawało w poście będziemy cyklicznie dodawać wskazówki.
Bądź na bieżąco i nie przegap żadnej z nich:
- Hint 1 → 2.06.2020 godzina 12:00
Pod adresem url umieszczone są 2 tzw. endpointy REST (Więcej na ten temat znajdziecie pod adresem: https://www.tutorialspoint.com/restful/index.htm)Endpoint /counter udostępnia metody GET oraz POST
Endpoint /invoice udostępnia metodę GET
Serwisy REST z reguły komunikują się przy wykorzystaniu notacji JSON. Aby wywołać metodę należy np. skorzystać z komendy CURL:
Poniższy przykład wywołuje metodę GET na endpoincie /invoice
curl -X GET https://gas-challenge.herokuapp.com/invoice
Następny to wywołanie komendy GET na endpoincie /counter
curl -X GET https://gas-challenge.herokuapp.com/counter
Często w wywołaniach GET metody akceptują parametry – spróbujmy:
curl -X GET https://gas-challenge.herokuapp.com/counter?day=34
Przykład wywołania metody POST z wysłaniem danych JSON:
curl -X POST https://gas-challenge.herokuapp.com/counter -d {„counter”:56,”day”:12} -H „Content-Type: application/json”
należy pamiętać o escape’owaniu cudzysłowów znakiem „”
- Hint 2 → 5.06.2020 godzina 12:00
- Hint 3 → 9.06.2020 godzina 12:00
- Hint 4 → 12.06.2020 godzina 12:00
- Hint 5 → 16.06.2020 godzina 12:00
Jeżeli masz dodatkowe pytania, które sprawiają trudność, zadaj je w komentarzu pod artykułem. Pomysłodawca konkursu odpowie na nie w sesji video.
Zapraszamy do gRywalizacji!
ktoś próbował? 🙂
Ja próbowałem wczoraj, jeszcze przed hintem, okryłem że jest podstrona ze statsami do sprawdzania czy komuś się udało 🙂 http://gas-challenge.herokuapp.com/stats. Na witrynie mamy otwarte porty wczoraj był otwarty port 25, dziś mamy 443, 80 5060. Nie mogłem dość jakie dane do POSTa trzeba przesłać, na razie tyle.
Prośba o pytania w tym miejscu to przygotujemy z autorem konkursu Poradnik Video 🙂
Proszę korzystać wyłącznie z portu HTTPS, to w całości wystarczające do rozwiązania zadania konkursowego. Aplikacja wykorzystuje chmurę Heroku w modelu PAAS, pod tym samym adresem IP widoczne są więc również usługi na innych portach, a ich liczba i przydział portów zmienia się dynamicznie (autor zadania).
Dobra, rozwiązane:
Zamaskowana flaga (pełna poszła na maila):
Następnym razem proszę coś trudniejszego 🙂 writeup niebawem 🙂
Gratulacje! Jest to prawidłowe rozwiązanie!
Gratulacje od autora – tak trudne nie było 🙂
Dzięki 🙂
Obiecany writeup.
Zawsze miło przeczytać writeup będąc autorem i rozumiejąc sposób postępowania przy rozwiązywaniu zadania. Mały komentarz z mojej strony JSON posiada (prawie, bo draft) ustandaryzowaną postać kanoniczną – https://tools.ietf.org/id/draft-rundgren-json-canonicalization-scheme-00.html. Postać ta jest standardowo wspierana przez szereg bibliotek do popularnych języków programowania.
Poniżej kod rozwiązujący zadanie, wykorzystujący zrzut jsona właśnie do postaci kanonicznej.
import requests
import hashlib
import base64
import json
url = „https://gas-challenge.herokuapp.com/”
session=requests.Session()
resp = session.get(url+’counter?day=1′)
min_counter = resp.json()[’counter’]
print(min_counter)
resp = session.get(url+’counter’)
day = resp.json()[’day’]
print(day)
for i in range(1, day+1):
data = {„day”: i, „counter”: min_counter}
text = json.dumps(data, separators=(’,’, ’:’), sort_keys=True)
digest = hashlib.sha256(text.encode(’utf8′)).digest()
digest64 = base64.b64encode(digest).decode(’utf8′)
data[’hash’] = digest64
resp = session.post(url+’counter’, json=data)
print(i, resp.content.decode(’utf8′))
Good to know. Dopiszę w update!
w celach edukacyjnych fajnie jak by rozwiązanie było zamieszczone:)