< BLOG >

Debugowanie aplikacji webowych z Wiresharkiem

27.10.2024Tomasz Szewczyk
Zielonkawy cyfrowy rekin w cyberprzestrzeni

Czym jest Wireshark

Nowoczesne aplikacje sieciowe korzystają z REST, który jest de facto standardem w dzisiejszym developmencie, zarówno dla aplikacji webowych jak i aplikacji mobilnych. REST (Representational state transfer) to architektura aplikacji webowych, która opisuje backend jako stan, który może być pobierany lub modyfikowany poprzez zapytania wysyłane do zbioru endpointów (POST, PUT, GET), które przyjmują i zwracają obiekty w formacie JSON.

Przy debugowaniu aplikacji webowych często pojawia się potrzeba przeanalizowania zapytań REST. Czasami logi w aplikacji są niewystarczające lub niemożliwe do uzyskania. Wtedy pojawia się potrzeba narzędzia, które umożliwi przenalizowanie ruchu sieciowego bez ingerencji w samą aplikację. Aby to osiągnąć możemy skorzystać z narzędzia Wireshark.

W tym artykule zaprezentuję jak skorzystać z Wiresharka do zalogowania i analizy ruchu sieciowego pomiędzy częścią backendową i frontendową aplikacji.

Hands on

Aby zainstalować Wiresharka najlepiej skorzystać z oficjalnych instrukcji lub z repozytorium dostępnego dla wybranego systemu operacyjnego. Kliknij, aby przejść do oficjalnej strony pobierania.

Dodatkowo stworzymy prostą aplikację webową, która wystawi prosty endpoint RESTowy. W tym celu skorzystamy z frameworka express.js, który jest jednym z najpopularniejszych frameworków do tworzenia aplikacji webowych w Node.js. Aby tego dokonać skorzystamy z poniższego kodu (wklej do pliku app.js w nowym folderze):

const express = require("express");
const app = express();
const port = 3000;

app.get("/api", (req, res) => {
  res.json({ message: "Hello World!" });
});

app.listen(port, () => {
  console.log(`Listening at http://localhost:${port}`);
});

Do uruchomienia aplikacji niezbędny będzie node.js oraz zainstalowanie zależności za pomocą npm. Aby uruchomić aplikację należy skorzystać z poniższych komend (przed uruchomieniem upewnij się, że masz zainstalowanego node.js oraz jesteś w folderze z plikiem app.js):

npm init -y
npm install express
node app.js

Aby przetestować działanie aplikacji należy otworzyć przeglądarkę i wpisać adres http://localhost:3000/api. W odpowiedzi powinno pojawić się {"message":"Hello World!"}.

Następnie należy uruchomić Wiresharka i wybrać właściwy interfejs. Jeżeli nie wiesz, który interfejs wybrać, skorzystaj z opcji any, która pozwala na nasłuchiwanie wszystkich interfejsów sieciowych.

Warto zaznaczyć, że Wireshark wymaga uprawnień administratora, aby móc nasłuchiwać ruch sieciowy na wszystkich interfejsach. Jeżeli podejrzewasz, że Wireshark nie działa poprawnie, sprawdź uprawnienia. Np. w systemie Linux można uruchomić Wiresharka z uprawnieniami roota za pomocą poniższej komendy:

sudo wireshark

Po wykonaniu tych kroków Wireshark zacznie logować cały ruch sieciowy, który przechodzi przez wybrany interfejs sieciowy. Zwykle ilość zalogowanych danych jest bardzo duża, ponieważ domyślnie Wireshark loguje wszystkie pakiety sieciowe. Aby zobaczyć tylko interesujące nas zapytania HTTP, należy skonfigurować odpowiednie filtry.

Najważniejsze filtry dla naszego przypadku to:

  • http - filtruje wszystkie zapytania HTTP
  • ip.src - filtruje zapytania wysyłane z określonego adresu IP
  • ip.dst - filtruje zapytania wysyłane do określonego adresu IP

Aby przefiltrować zalogowane dane należy dodać odpowiednie wyrażenie w pasku filtrów w górnej części interfejsu. Np. aby zobaczy wszystkie pakiety wysyłane na adres ip localhost należy wpisać: ip.dst = 127.0.0.1, aby zobaczyć wszystkie zapytania HTTP wysyłane lub odbierane przez aplikację uruchomioną na localhoście należy wpisać: (ip.dst = 127.0.0.1 or ip.src = 127.0.0.1 and http).

Localhost (127.0.0.1) to adres IP, który jest przypisany do interfejsu sieciowego loopback, który jest używany do komunikacji między procesami na tym samym urządzeniu. W przypadku aplikacji webowej uruchomionej na lokalnym serwerze, zapytania HTTP będą wysyłane na adres IP.

Przykład użycia

Teraz wireshark wyświetla tylko przychodzący i wychodzący ruch naszej aplikacji. Po odświeżeniu strony w przeglądarce powinny pojawić się nowe zapytania HTTP. Na przykładzie poniżej pierwsze dwa zapytania to odpowiednio request do i response z naszej aplikacji.

Warto wiedzieć również jak zobaczyć payload zapytań w formacie JSON. Domyślnie Wireshark pozwala na analizę payloadu zapytań w nieintuicyjnym, natywnym formacie. Aby otrzymać dane w bardziej czytelnym formacie należy skorzystać z funkcji "copy as printable text" dostępną w menu, pod prawym przyciskiem myszy w sekcji wyświetlającej body zapytania.

Aby otrzymać body zapytania w formacie JSON należy wybrać odpowiednie zapytanie oraz Java Script Object Notation, a następnie skorzystać z opcji copy as printable text.

Aby otrzymać header zapytania należy wybrać odpowiednie zapytanie oraz Hypertext Transfer Protocol, a następnie skorzystać z opcji copy as printable text.

Podsumowanie

Omówiłem kluczowe aspekty wykorzystania narzędzia Wireshark do debugowania aplikacji webowych, koncentrując się na zapytaniach REST, które są podstawą nowoczesnych aplikacji internetowych i mobilnych. Wireshark, jako zaawansowane narzędzie do analizy ruchu sieciowego, pozwala na obserwację zapytań HTTP bez konieczności ingerencji w kod aplikacji. Prawidłowo skonfigurowane filtry pozwalają na dostosowanie działania Wiresharka do naszych potrzeb.

Porozmawiajmy
Szukasz irytującego buga? Potrzebujesz pomocy w rozwoju lub utrzymaniu aplikacji webowych? Szukasz kreatywnego zespołu programistów do rozwiązania Twojego problemu? Świetnie trafiłeś! Skontaktuj się z nami.

W Blues Brackets zajmujemy się rozwiązywaniem prawdziwych problemów za pomocą najnowszych technologii.

Porozmawiajmy

<mail>hello@bluesbrackets.com
<phone>+48 535 462 678

Spotkajmy się

Kraków, PolandWrocław, PolandWarszawa, Poland

Kontakt

Blues Brackets sp. z o. o.NIP 8842824071REGON 527681035

Agile Software Development PolskaUsługi tworzenia oprogramowania metodą AgileUsługi Tworzenia Chatbotów AIAnimowane Strony Internetowe | Profesjonalne UsługiEksperci w Embedded Android i BluetoothAplikacje webowe vs desktopowe | bluesBracketsAplikacje webowe czy mobilne? Fullstack & UX/UIEkspercka firma tworząca aplikacje iOS w PolsceTworzenie oprogramowania medycznegoAplikacje mobilne dla biznesu | bluesBracketsPolski Software House | UI/UX, Fullstack, Mobile, IoTAutomatyczne testy regresji i kompleksowy developmentDedykowane oprogramowanie na zamówienieBody leasing React Native i embeddedRozwój aplikacji cross-platform (wieloplatformowych)Nowoczesny software house: Dyrektor IT jako usługa (CTO as a Service), DevOps, UX/UIDevOps jako Usługa | Doradztwo AWS CloudPolski Software House: Agile & UI/UXTworzenie oprogramowania zgodnego z EAAEdge Computer Vision i Embedded | bluesBracketsSkalowalne aplikacje desktopowe i embedded – bluesBracketsFirma konsultingowa DevOps | bluesBracketsRozwiązania AI szyte na miarę dla biznesuMigracje Data Center i IT – Bezpieczne UsługiKonsulting migracji do chmury – bluesBracketsTworzenie aplikacji Flutter | bluesBracketsUsługi Rozwoju Aplikacji FlutterOutsourcing IT i AI dla branży medycznejUsługi tworzenia aplikacji hybrydowychIntegracje systemów i wdrożenia ChatGPTBezpieczne testy systemowe i integracjaUsługi integracji systemów ITOprogramowanie IoT i Smart City | bluesBracketsUsługi inżynierii oprogramowania embedded | bluesBracketsTworzenie oprogramowania IoT dla przemysłuIoT MQTT Dashboardy i rozwiązania embeddedIIoT i Przemysł 4.0 – oprogramowanie na miaręPolski Software House | Rozwiązania IoT i EmbeddedTworzenie produktów IoT | Embedded & Fullstack Software HouseRozwój IoT i Wearable | bluesBracketsOprogramowanie IoT dla handlu, wearables, nieruchomościPlatforma zarządzania IoT i dedykowane rozwiązaniaUsługi backend i JavaScript | bluesBracketsKonsultacje Machine Learning i Rozwój Oprogramowania | UI/UX, Fullstack, Mobile, EmbeddedKoszty wdrożenia i rozwoju sklepu onlineEksperckie rozwiązania embedded i mikrokontrolerówEkspercka migracja oprogramowania | bluesBracketsMikroserwisy czy Monolit: Ekspercka ArchitekturaModernizacja aplikacji legacy dla firmUsługi rozwoju MVP | Firma tworząca MVP dla startupówDedykowane MVP i oprogramowanie szyte na miaręTworzenie MVP oprogramowania | Wdrażanie MVP i POCEksperci IoT i Embedded | bluesBracketsNB-IoT, systemy wbudowane i zwinne ITIT Nearshoring i rozwój oprogramowania PolskaUsługi Next.js i WordPressDedykowane CMS i oprogramowanie na miaręTworzenie dedykowanych aplikacji webowych | bluesBracketsAplikacje webowe & AI szyte na miaręSystemy Zarządzania i Oprogramowanie AINode.js, React i Next.js Polska – bluesBracketsFirma Node.js – zaufane usługi i rozwójRozliczenie ryczałtowe czy T&M – co wybrać?Business Intelligence dla firm | bluesBracketsTworzenie oprogramowania dla branży turystycznejTworzenie oprogramowania dla nieruchomościProfesjonalne prototypowanie oprogramowaniaDedykowane rozwiązania IT dla firm i startupówOutsourcing inżynierii oprogramowania PolskaOutsourcing Python – Polska firma offshoreFirma outsourcingowa IT — PolskaPolska firma outsourcingu ITEksperci embedded i bare metal | bluesBracketsZaufana firma offshore software development w PolsceEkspercka firma projektowa sprzętu | Własna elektronikaUsługi Proof of Concept i Proof of PrincipleProof of Concept a Prototyp – Agile SoftwareTworzenie aplikacji webowych ReactJSRozszerzanie zespołów IT dla startupów i firmKompleksowe rozwiązania IT | Software House PolskaJęzyki i usługi tworzenia aplikacji mobilnychTworzenie aplikacji mobilnych na Androida i iOSUsługi Rozwoju Aplikacji ReactRozwój produktów IoT i dedykowane oprogramowanieOprogramowanie Embedded i IoT | bluesBracketsAgencja wdrożeń LLM | bluesBracketsTworzenie progresywnych aplikacji webowych | bluesBrackets PolskaEksperckie usługi hardware | bluesBracketsUsługi rozwoju systemów wbudowanychRozwiązania embedded z RTOSRozwój oprogramowania SaaS: chmura zgodna z RODOSkalowanie aplikacji dla startupów — rozwiązania skalowalneOprogramowanie SLA & usługi zarządzane PolskaFirmy programistyczne | Rozwiązania na miaręSoftware House Polska | Tworzenie Aplikacji i Systemów WbudowanychExpert Software Migration Services | bluesBracketsSpecjalistyczne usługi inżynierii oprogramowaniaRozwój aplikacji dla sportu i ochrony zdrowiaStaff Augmentation | Rozszerzenie zespołu ITModernizacja systemów IT i dedykowane oprogramowanieRozwiązania IT dla magazynowania energii i IoTUsługi testowania jakości | bluesBracketsTesty i integracja systemów IT end-to-endTworzenie aplikacji PWA | iOS i AndroidTworzenie PWA na iOS – Aplikacje mobilneUczenie maszynowe w analizie predykcyjnejRozwiązania ML dla łańcucha dostawDedykowane usługi IT i outsourcing w PolsceRozwiązania AI Chatbot dla FirmUsługi inżynierii danych i wizualizacjiDedykowane usługi IT na żądanie | bluesBracketsRozwój aplikacji chmurowych | Polska firma ITUsługi rozwoju IoT | Internet rzeczy IoTUsługi rozwoju oprogramowania | bluesBracketsUsługi tworzenia oprogramowania na zamówienie — bluesBracketsZdalne wsparcie IT i utrzymanie aplikacjiUtrzymanie oprogramowania i modernizacja | bluesBracketsProfesjonalne usługi UX/UI designStaff augmentation czy usługi zarządzane?Warsztaty Product Discovery dla startupów i firmUsługi chmury i transformacji cyfrowejUsługi tworzenia aplikacji webowych od bluesBracketsEksperci white label dla aplikacji i IoTDedykowane systemy do zarządzania projektamiLiderzy Java w Polsce – zatrudnij ekspertówZatrudnij dedykowany zespół IT w PolsceZatrudnij dedykowany zespół IT w PolsceDedykowane zespoły programistyczne w Europie