Wireshark — wiodący analizator ruchu sieciowego o otwartym kodzie źródłowym, służący do przechwytywania i inspekcji pakietów w czasie rzeczywistym. Narzędzie obsługuje ponad dwa tysiące protokołów sieciowych i działa na wszystkich głównych platformach. Według Wireshark User Guide (2026) narzędzie jest wykorzystywane do diagnostyki sieci, debugowania API i analizy bezpieczeństwa w tworzeniu aplikacji mobilnych i internetowych.
Najważniejsze
Wireshark — program o otwartym kodzie źródłowym (GPLv2), który przechwytuje pakiety danych przechodzące przez interfejs sieciowy komputera. Opiera się na bibliotece libpcap (Unix) lub Npcap (Windows) do przechwytywania na poziomie warstwy łącza danych modelu OSI.
Karta sieciowa w trybie normalnym odbiera tylko ramki adresowane do jej adresu MAC. Wireshark przełącza interfejs w tryb promiscuous (nieprzepuszczalny dla adresowania), w którym system przetwarza wszystkie przechodzące ramki niezależnie od odbiorcy. Przechwycone dane przekazywane są do jądra przez surowy gniazdo raw socket, po czym biblioteka libpcap kopiuje je do przestrzeni użytkownika w celu analizy.
Wireshark wykorzystuje architekturę modułową: każdy protokół jest zaimplementowany jako osobny dyssektor — wtyczka, która parsuje dane binarne i wyświetla je w uporządkowany sposób. Na stan z roku 2026 w programie zaimplementowano dyssektory dla 2 874 protokołów, w tym HTTP/2, QUIC, gRPC i MQTT. Dyssektory działają przez system drzewa protokołów — każdy pakiet jest analizowany warstwowo: od ramki Ethernet po warstwę aplikacji.
// Przykład prostego dyssektora dla niestandardowego protokołu
static int dissect_custom(tvbuff_t *tvb, packet_info *pinfo,
proto_tree *tree, void *data) {
proto_item *ti = proto_tree_add_item(tree, hf_custom_field,
tvb, 0, tvb_captured_length(tvb), ENC_NA);
return 0;
} Interfejs graficzny Wireshark jest podzielony na trzy panele: listę pakietów (packet list), szczegóły protokołów (packet details) i zrzut hex (packet bytes). Każdy panel aktualizuje się w czasie rzeczywistym i obsługuje interaktywną nawigację — kliknięcie w wiersz pakietu otwiera jego pełną strukturę.
Narzędzie odczytuje pliki przechwytywania w formatach pcap, pcapng, snoop i NetMon. Eksport jest możliwy do JSON, XML, CSV i plain text. Wśród kluczowych protokołów warstwy aplikacji znajdują się: HTTP/HTTPS, DNS, DHCP, TCP, UDP, TLS, QUIC, WebSocket, MQTT, AMQP i Protobuf. Dla tworzenia aplikacji mobilnych szczególnie ważne jest wsparcie gRPC i HTTP/2 z multipleksowaniem strumieni.
Wbudowane narzędzia obejmują Follow Stream (odtwarzanie pełnego dialogu TCP/UDP/TLS), IO Graph (wykres przepustowości), statystyki rozmów (Conversations) oraz hierarchię protokołów (Protocol Hierarchy). Funkcja Flow Graph wizualizuje sekwencję pakietów między węzłami, co ułatwia znajdowanie przyczyn opóźnień podczas debugowania komunikacji klient-serwer.
Uruchomienie przechwytywania zaczyna się od wyboru interfejsu sieciowego — Ethernet, Wi-Fi, Bluetooth PAN lub Loopback. W systemie Windows może być konieczna instalacja Npcap w trybie WinPcap API Compatible Mode. Do przechwytywania na urządzeniach mobilnych wykorzystuje się Remote Packet Capture przez tunel SSH.
Na urządzeniu z Androidem ruch jest przechwytywany przez tcpdump lub PCAPdroid z późniejszym przesłaniem pliku na komputer roboczy. Polecenie do zdalnego przechwytywania przez ADB:
# Przechwytywanie ruchu na Androidzie przez ADB shell
adb shell tcpdump -i wlan0 -s 0 -w /sdcard/capture.pcap
# Kopiowanie na komputer
adb pull /sdcard/capture.pcap . W systemie Windows ruch localhost (127.0.0.1) nie przechodzi przez interfejs fizyczny, dlatego Wireshark nie widzi go bezpośrednio. Rozwiązanie — instalacja Npcap z opcją Loopback Support lub przekierowanie ruchu przez RawCap. W systemach Linux i macOS interfejs loopback (lo) jest przechwytywany bez dodatkowych ustawień.
Wireshark oferuje dwa typy filtrów: capture filters (stosowane przed przechwyceniem, na poziomie libpcap) i display filters (stosowane do już przechwyconych danych). Capture filters używają składni BPF (Berkeley Packet Filter), a display filters — własnego języka Wireshark z autouzupełnianiem.
Filtry BPF zapisuje się w formacie tcpdump i są wykonywane w jądrze, co minimalizuje utratę pakietów przy wysokim obciążeniu. Przykłady filtrów:
| Filtr | Przeznaczenie |
|---|---|
| tcp port 80 | Tylko ruch HTTP na standardowym porcie |
| host 192.168.1.1 | Pakiety od konkretnego hosta |
| not arp | Wszystkie pakiety z wyjątkiem zapytań ARP |
Display filters stosuje się post factum i obsługują złożone warunki z operatorami logicznymi and, or, not. Przykład: http.request.method == "POST" and ip.src == 192.168.0.100 odfiltruje tylko żądania POST z konkretnego IP. Filtry można zapisywać jako ulubione do ponownego użycia.
Ruch HTTP jest wyświetlany w Wireshark w czytelnej postaci: metoda żądania, URI, nagłówki i treść odpowiedzi. Funkcja Follow TCP Stream zbiera pełny dialog klienta i serwera w jednym oknie. Dla HTTPS wymagane jest odszyfrowanie sesji TLS, ponieważ zawartość jest zaszyfrowana.
Przeglądarki Chrome i Firefox obsługują zmienną środowiskową SSLKEYLOGFILE, która zapisuje klucze sesyjne TLS do pliku tekstowego. Wireshark wykorzystuje ten plik do odszyfrowywania rekordów. Konfiguracja odbywa się przez Preferences → Protocols → TLS → (Pre)-Master-Secret log filename.
# Uruchomienie Chrome z zapisem kluczy TLS
export SSLKEYLOGFILE=/tmp/sslkeys.log
google-chrome .
# Po przechwyceniu podać ścieżkę w Wireshark
# Edit → Preferences → Protocols → TLS → Log Filename gRPC wykorzystuje HTTP/2 jako transport i Protobuf do serializacji danych. Wireshark odszyfrowuje komunikaty gRPC, jeśli podać plik .proto z definicją struktur. Dyssektor Protobuf dopasowuje pola binarne do nazw z pliku proto, co jest kluczowe przy debugowaniu architektury mikroserwisowej.
Debugowanie mobilne przez Wireshark wymaga przekierowania ruchu urządzenia na komputer. Najbardziej niezawodna metoda — utworzenie punktu dostępu Wi-Fi na laptopie i przekierowanie ruchu przez NAT. W systemie Android dostępna jest również metoda VPN z aplikacją PCAPdroid bez uprawnień root.
PCAPdroid tworzy lokalną usługę VPN, która przekierowuje ruch aplikacji do Wireshark przez strumień UDP. Aplikacja nie wymaga dostępu root i obsługuje filtrowanie według poszczególnych procesów. Uzyskane pliki pcap otwierane są w Wireshark do pełnej analizy.
# Odbieranie ruchu od PCAPdroid na komputerze
# PCAPdroid → Settings → PCAP dumper → UDP Exporter
nc -l -u 192.168.0.10 12345 > capture.pcap Wireshark — narzędzie uniwersalne, ale dla konkretnych zadań istnieją bardziej wyspecjalizowane rozwiązania. tcpdump jest skuteczniejszy do serwerowego przechwytywania bez grafiki, Charles Proxy jest wygodniejszy do analizy ruchu HTTPS, a Fiddler — do inspekcji ruchu internetowego z możliwością modyfikowania żądań na bieżąco.
Charles Proxy pełni rolę pośredniczącego serwera proxy z możliwością przechwytywania HTTPS przez własną certyfikację SSL. W przeciwieństwie do Wireshark, Charles nie wymaga konfiguracji SSLKEYLOGFILE i potrafi nie tylko wyświetlać, ale także modyfikować ruch — podmieniać odpowiedzi, emulować opóźnienia i powtarzać żądania.
Fiddler — kolejne narzędzie proxy, popularne w ekosystemie .NET. Zapewnia wbudowany edytor żądań, wsparcie AutoResponder do mocków oraz kompozytor do tworzenia niestandardowych żądań. Fiddler lepiej nadaje się do analizy ruchu przeglądarki, a Wireshark — do analizy sieci niskiego poziomu.
| Narzędzie | Typ | HTTPS bez kluczy | Modyfikacja ruchu |
|---|---|---|---|
| Wireshark | Sniffer | Nie (wymagany SSLKEYLOGFILE) | Tylko podgląd |
| Charles | Proxy | Tak (niestandardowy certyfikat) | Tak |
| Fiddler | Proxy | Tak (niestandardowy certyfikat) | Tak |
| tcpdump | Sniffer | Nie | Tylko podgląd |
Wireshark wymaga zrozumienia podstawowych zasad przechwytywania ruchu. Jednym z częstych scenariuszy jest poszukiwanie źródła opóźnień w aplikacji mobilnej przez filtr tcp.analysis.ack_rtt. Do znajdowania wolnych żądań HTTP użyj warunku http.time większe niż 1.
Do znalezienia wolnych żądań HTTP przefiltruj http.time większe niż 1 — Wireshark pokaże żądania z czasem odpowiedzi powyżej 1 sekundy. Łącz z ip.addr do analizy konkretnego serwera. IO Graph z interwałem 1 sekundy wyraźnie pokaże piki obciążenia.
Wireshark obsługuje eksport do CSV, JSON i XML przez menu File. Do automatycznej analizy używaj tshark — wersji konsolowej działającej w pipelineach CI/CD. Tshark obsługuje te same filtry i formaty wyjścia co wersja graficzna.
Wireshark wymaga zrozumienia podstawowych zasad przechwytywania ruchu. Jednym z częstych scenariuszy jest poszukiwanie źródła opóźnień w aplikacji mobilnej przez filtr tcp.analysis.ack_rtt. Do znajdowania wolnych żądań HTTP użyj warunku http.time większe niż 1.
Do znalezienia wolnych żądań HTTP przefiltruj http.time większe niż 1 — Wireshark pokaże żądania z czasem odpowiedzi powyżej 1 sekundy. Łącz z ip.addr do analizy konkretnego serwera. IO Graph z interwałem 1 sekundy wyraźnie pokaże piki obciążenia.
Wireshark obsługuje eksport do CSV, JSON i XML przez menu File. Do automatycznej analizy używaj tshark — wersji konsolowej działającej w pipelineach CI/CD. Tshark obsługuje te same filtry i formaty wyjścia co wersja graficzna.
Często zadawane pytania
Wireshark zapewnia interfejs graficzny z wizualizacją pakietów, wbudowanymi filtrami i statystyką. tcpdump — narzędzie konsolowe bez GUI, wygodne do serwerowego przechwytywania przez SSH. Wireshark potrafi czytać pliki tcpdump i odwrotnie.
Do odszyfrowania wymagany jest plik kluczy sesyjnych TLS (SSLKEYLOGFILE). Chrome i Firefox eksportują klucze przy uruchomieniu ze zmienną środowiskową. Ścieżka do pliku podawana jest w ustawieniach Protocols → TLS w Wireshark.
Ruch loopback w systemie Windows nie przechodzi domyślnie przez sterownik Npcap. Rozwiązanie — instalacja Npcap z włączoną opcją Loopback Support lub użycie narzędzia RawCap do przechwytywania ruchu lokalnego.
Tak, przez przekierowanie ruchu na komputer. Android obsługuje przechwytywanie przez PCAPdroid (bez root) lub tcpdump (z root). iOS wymaga RVI (Remote Virtual Interface) przez macOS lub jailbreak do przechwytywania.
Display filter frame contains szuka ciągu znaków lub sekwencji hex w całym pakiecie. Przykład: frame contains "password" znajdzie pakiety z podciągiem password w dowolnym polu. Do dokładnego wyszukiwania według pola użyj http.request.uri contains "api" .
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również