Prezentacja poświęcona jest w całości filtrom wyświetlania Wireshark, których składnia opiera się na schemacie pole.operator.wartość. Omówiono operatory porównania i logiczne, filtrowanie po adresach IP, portach, protokołach oraz zaawansowane techniki z użyciem contains, matches i funkcji wbudowanych. Przedstawiono również różnicę między capture filter (BPF) a display filter oraz praktyczne studia przypadków.
Wireshark to najpopularniejsze narzędzie do analizy ruchu sieciowego, a display filtry stanowią jego kluczową funkcjonalność. Filtry te pozwalają na wyświetlanie tylko tych pakietów, które spełniają zdefiniowane kryteria, co znacząco ułatwia diagnostykę.
Składnia display filtrów opiera się na schemacie pole.operator.wartośćść, gdzie pole odnosi się do konkretnego atrybutu protokołu sieciowego. W przeciwieństwie do capture filtrów, które działają na poziomie jądra systemu i bezpowrotnie odrzucają pakiety, display filtry operują na już zgromadzonych danych. Umiejętność sprawnego konstruowania takich filtrów jest niezbędna dla każdego administratora sieci i specjalisty ds. bezpieczeństwa.
Plan części 3
- Składnia filtrów wyświetlania – pole.operator.wartośćść
- Operatory porównania i logiczne
- Display filter vs Capture filter (BPF)
- Filtrowanie po adresach IP, portach, protokołach
- Filtrowanie HTTP, DNS, DHCP, ICMP, TCP flags
- Filtrowanie TCP analysis, ARP, MAC, EtherType
- Filtrowanie po długości, czasie, markach
- contains i matches – szukanie wzorców
- Funkcje w filtrach (upper, lower, count, sum)
- Zapisywanie i zarządzanie filtrami
- Studia przypadków i podsumowanie
Plan trzeciej prezentacji z cyklu pomiarów logicznych obejmuje szeroki zakres zagadnień związanych z filtrami wyświetlania w Wiresharku. Omówiona zostanie podstawowa składnia, operatory porównania i logiczne, a także różnice między display filter a capture filter.
W dalszej części przedstawione zostanie filtrowanie według adresów IP, portów TCP/UDP, protokołów takich jak HTTP, DNS, DHCP, ICMP, a także zaawansowane techniki z wykorzystaniem flag TCP i analizy strumieni. Prezentacja obejmuje również funkcje contains, matches oraz agregujące, co pozwoli na precyzyjne wyszukiwanie wzorców w danych sieciowych.
Czym są filtry wyświetlania?
Display filter (filtr wyświetlania) – język zapytań Wireshark służący do wybierania pakietów spełniających określone kryteria.
Cechy:
- Działa na już przechwyćonych danych (offline i online)
- Nie usuwa pakietów – tylko ukrywa niepasujące
- Bogata składnia – setki pól protokołów
- Autouzupełnianie i walidacja (zielony/żółty/czerwony pasek)
Motto: „Najpierw przechwyć wszystko, potem wyfiltruj to, czego potrzebujesz".
Filtr wyświetlania nie zmienia danych – możesz swobodnie przełączać filtry bez utraty informacji.
Display filtry w Wiresharku to specjalny język zapytań umożliwiający wybieranie pakietów na podstawie kryteriów związanych z dowolnym polem protokołu sieciowego. Ich główną zaletą jest działanie na już przechwyćonych danych, zarówno tych zebranych wcześniej w pliku, jak i podczas bieżącego przechwytywania.
Wireshark oferuje autouzupełnianie składni oraz walidację w czasie rzeczywistym, sygnalizowaną kolorem paska filtrów zielonym dla poprawnej składni, żółtym dla filtrów potencjalnie wolnych i czerwonym dla błędów. Zasada najpierw przechwyć wszystko, potem wyfiltruj pozwala uniknąć utraty istotnych danych podczas przechwytywania.
Budowa filtra
Każdy filtr wyświetlania składa się z trzech elementów:
pole . operator wartość
- pole: nazwa pola protokołu (np. ip.src, tcp.port, http.request.method)
- operator: sposób porównania (==, !=, >, <, >=, <=, contains, matches)
- wartość: wartość do porównania (adres IP, port, string, liczba)
Przykład:
ip.src == 192.168.1.1
Wyświetli pakiety, których źródłowy adres IP to 192.168.1.1.
Kolejność jest stała: zawsze pole.operator.wartośćść. Każdy element oddzielony spacją od operatora (z wyjątkiem ==, != itp. które są łączone z polem).
Każdy display filter w Wiresharku składa się z trzech obowiązkowych elementów: nazwy pola protokołu, operatora oraz wartości porównania. Pole jest zapisywane z kropką oddzielającą nazwę protokołu od konkretnego atrybutu, na przykład ip.src dla źródłowego adresu IP.
Operatorzy tacy jak == oznaczają równość, != nierówność, a > i < służą do porównań numerycznych. Wartość musi być dostosowana do typu pola – może to być adres IP, numer portu, string lub liczba. Przykładowe wyrażenie http.request.method == GET pozwoli wyświetlić tylko żądania HTTP typu GET.
Operatory: ==, !=, >, <
| Operator | Znaczenie | Przykład |
| == | równy | ip.src == 192.168.1.1 |
| != | rózny | ip.src != 192.168.1.1 |
| > | wiekszy | frame.len > 1000 |
| < | mniejszy | frame.len < 100 |
Uwaga: operator == dla stringów i adresów wymaga dokładnego dopasowania.
Dla liczb: >, <, >=, <= działają normalnie.
W filtrach wyświetlania używamy == a nie = (pojedynczy znak = nie jest operatorem w filtrach wyświetlania!).
Operatory porównania w display filtrach dzielą się na dwie grupy: podstawowe (==, !=, >, <) oraz rozszerzone (>=, <=, contains, matches). Operatory podstawowe są najszybsze i zalecane do większości zastosowań, ponieważ Wireshark optymalizuje je wewnętrznie.
Ważną zasadą jest używanie podwójnego znaku równości == zamiast pojedynczego =, który nie jest poprawnym operatorem w składni display filtrów. Dla wartości liczbowych operatory >, <, >= i <= działają zgodnie z oczekiwaniami matematycznymi, co jest przydatne przy filtrowaniu według rozmiaru ramki czy czasu odpowiedzi.
Operatory: >=, <=, contains, matches
| Operator | Znaczenie | Przykład |
| >= | większy lub równy | frame.len >= 1500 |
| <= | mniejszy lub równy | tcp.port <= 1024 |
| contains | zawiera podciag | http contains "password" |
| matches | dopasowuje regex | http.request.uri matches "\.php\?id=\d+" |
contains – sprawdza czy pole (lub surowe dane) zawiera podany string (case-sensitive).
matches – używa wyrażeń regularnych (składnia Perl/PCRE).
contains i matches są WOLNIEJSZE niż == – używaj ich tylko gdy naprawdę potrzebujesz szukania wzorca.
Operator contains sprawdza, czy dane pole lub surowa zawartość pakietu zawiera określony podciąg znaków, przy czym wyszukiwanie jest case-sensitive, czyli rozróżnia wielkość liter. Na przykład http contains password znajdzie pakiety zawierające słowo password, ale nie Password.
Operator matches umożliwia używanie wyrażeń regularnych zgodnych ze składnią PCRE, co daje ogromną elastyczność przy wyszukiwaniu wzorców. Należy jednak pamiętać, że matches jest najwolniejszym operatorem, ponieważ dla każdego pakietu kompilowane jest wyrażenie regularne, co może znacząco spowolnić działanie na dużych zbiorach danych.
Łączenie warunków
| Operator | Znaczenie | Skladnia |
| and (&&) | koniunkcja | ip.src == 1.1.1.1 and tcp.port == 80 |
| or (||) | alternatywa | ip.src == 1.1.1.1 or ip.dst == 1.1.1.1 |
| not (!) | negacja | not tcp.port == 22 |
| xor | ekskluzywna alternatywa | ip.src == 1.1.1.1 xor ip.dst == 1.1.1.1 |
Priorytet: not > and > or. Używaj nawiasów dla jasności!
Zawsze używaj nawiasów przy mieszaniu and i or – to samo co w matematyce: (A and B) or C vs A and (B or C). Unikniesz błędów logicznych!
Operatory logiczne w display filtrach pozwalają na łączenie wielu warunków w jednym wyrażeniu, co umożliwia tworzenie precyzyjnych zapytań. Operator and (lub &&) wymaga spełnienia wszystkich warunków, or (lub ||) wystarczy spełnienie przynajmniej jednego, a not (lub !) neguje warunek.
Istnieje również operator xor (ekskluzywna alternatywa), który wymaga spełnienia dokładnie jednego z dwóch warunków, ale nie obu jednocześnie. Kolejność priorytetów to not najwyższy, potem and, a na końcu or, dlatego przy mieszaniu tych operatorów zalecane jest używanie nawiasów dla jasności i uniknięcia błędów logicznych.
Grupowanie wyrażeń
Nawiasy pozwalają grupować wyrażenia i kontrolować kolejność ewaluacji.
ip.src == 10.0.0.1 and (tcp.port == 80 or tcp.port == 443)
(udp.port == 53 or tcp.port == 53) and not ip.addr == 8.8.8.8
_ws.malformed or tcp.analysis.retransmission
Nawiasy to także dobry sposób na zwiększenie czytelności filtra.
Jeśli filtr robi się zbyt długi – rozbij go na kilka prostszych lub zapisz jako przycisk filtra.
Nawiasy w display filtrach pełnią tę samą funkcję co w matematyce i językach programowania – grupują wyrażenia i kontrolują kolejność ich ewaluacji. Dzięki nim można precyzyjnie określić, które warunki mają być sprawdzane razem, co jest szczególnie ważne przy mieszaniu operatorów and i or.
Dobrą praktyką jest używanie nawiasów nawet wtedy, gdy nie są one wymagane, ponieważ poprawiają czytelność filtra dla innych użytkowników. Przykładowo filtr ip.src == 10.0.0.1 and (tcp.port == 80 or tcp.port == 443) jest znacznie czytelniejszy niż wersja bez nawiasów, która mogłaby być niejednoznaczna.
Dwa światy filtrów
| Cecha | Display filter | Capture filter (BPF) |
| Kiedy dziala? | Po przechwyćeniu | Podczas przechwytywania (w jadrze) |
| Skladnia | Wireshark-specific (pole.operator) | BPF (host, port, proto) |
| Usuwa pakiety? | Nie – tylko ukrywa | Tak – odrzuca bezpowrotnie |
| Poziomy protokółów | Wszystkie (łącznie z L7: HTTP, DNS) | Tylko L2-L4 |
| Zlozonosc | Bardzo bogata skladnia | Ograniczona |
Filtr wyświetlania – elastyczna analiza. Filtr przechwytywania – redukcja danych na wejściu.
Główna zasada: nie używaj filtra przechwytywania, jeśli nie wiesz dokładnie, czego szukasz. Lepiej przechwyćić wszystko i wyfiltrować filtrem wyświetlania.
Display filter i capture filter to dwa zupełnie różne mechanizmy filtrowania w Wiresharku, działające na różnych etapach analizy ruchu. Display filter działa po przechwyćeniu pakietów i jedynie ukrywa te niepasujące, podczas gdy capture filter działa w jądrze systemu podczas przechwytywania i bezpowrotnie odrzuca pakiety.
Capture filtry używają składni BPF, która jest ograniczona do warstw L2-L4, natomiast display filtry obsługują pełną składnię z dostępem do pól wszystkich warstw, włączając w to protokoły warstwy aplikacji takie jak HTTP czy DNS. Z tego powodu zaleca się najpierw przechwyćić wszystko, a dopiero potem filtrować display filterem, aby nie stracić potencjalnie ważnych danych.
Gdzie szukać pól?
Sposoby na znalezienie odpowiedniego pola dla filtra:
- Expression button: kliknij przycisk „Expression" w pasku filtrów – otwiera przeglądarkę wszystkich pól protokołów
- Prawy-klik w Packet Details: kliknij prawym na pole → „Apply as Filter" → wybierz warunek
- Prawy-klik → Prepare as Filter: przygotowuje filtr, ale go nie aplikuje
- Wpisz w pasek filtrow: autouzupelnianie podpowiada dostepne pola
Każde pole w Packet Details ma swoją nazwę – widoczną w dolnym pasku po kliknięciu.
Znajdowanie odpowiednich pól protokołów do budowania filtrów jest jedną z podstawowych umiejętności podczas pracy z Wiresharkiem. Najprostszą metodą jest użycie przycisku Expression w pasku filtrów, który otwiera okno z drzewiastą listą wszystkich dostępnych pól protokołów.
Alternatywnie można kliknąć prawym przyciskiem myszy na dowolne pole w oknie Packet Details i wybrać Apply as Filter lub Prepare as Filter, co automatycznie generuje odpowiednie wyrażenie. Wireshark oferuje również autouzupełnianie podczas ręcznego wpisywania nazw pól, co znacznie przyspiesza proces tworzenia filtrów dla początkujących użytkowników.
Expression dialog
Kliknij przycisk Expression (lub Analyze → Display Filter Expression).
Okno zawiera:
- Field: drzewiasta lista wszystkich pol (protokól → pole)
- Relation: wybór operatora (==, !=, contains, matches itd.)
- Value: pole do wpisania wartosci
- Predefined values: lista mozliwych wartości (jeśli pole ma staly zbior)
Po wybraniu – kliknij OK – filtr wstawia się do paska.
Znajomość pól przychodzi z praktyką. Na początku korzystaj z Expression i prawego-kliku.
Przycisk Expression w interfejsie Wireshark to potężne narzędzie ułatwiające tworzenie display filtrów, szczególnie dla osób początkujących. Okno Expression dialog zawiera drzewiastą listę wszystkich protokołów i ich pól, co pozwala na szybkie znalezienie interesującego nas atrybutu bez konieczności zapamiętywania jego nazwy.
Po wybraniu pola można określić operator (relację) oraz wartość, a także skorzystać z listy predefiniowanych wartości, jeśli pole ma ograniczony zbiór możliwych opcji. Po kliknięciu OK gotowy filtr zostaje wstawiony do paska, co znacznie przyspiesza naukę składni i pomaga uniknąć błędów przy ręcznym wpisywaniu.
Adresy IP w filtrach
| Pole | Opis | Przykład |
| ip.src | Źródlowy adres IP | ip.src == 192.168.1.100 |
| ip.dst | Docelowy adres IP | ip.dst == 10.0.0.1 |
| ip.addr | Źródlowy LUB docelowy | ip.addr == 192.168.1.1 |
| ipv6.src | Źródlowy IPv6 | ipv6.src == ::1 |
| ipv6.dst | Docelowy IPv6 | ipv6.dst == fe80::1 |
ip.addr – skrót: sprawdza zarówno źródło, jak i cel. Używaj, gdy chcesz wybrać ruch z/do danego IP.
Filtrowanie według adresów IP jest jedną z najczęściej używanych funkcji display filtrów w Wiresharku. Dostępne są trzy główne pola: ip.src dla źródłowego adresu IP, ip.dst dla docelowego adresu IP oraz ip.addr, który jest skrótem sprawdzającym zarówno źródło, jak i cel.
Użycie ip.addr jest wygodne, gdy chcemy znaleźć cały ruch związany z konkretnym adresem, niezależnie od kierunku transmisji. Dla sieci IPv6 dostępne są analogiczne pola ipv6.src, ipv6.dst i ipv6.addr. Warto pamiętać, że adresy IP można porównywać także z użyciem notacji CIDR, co pozwala na filtrowanie całych podsieci.
Porty TCP i UDP
| Pole | Opis | Przykład |
| tcp.port | Port TCP (src lub dst) | tcp.port == 80 |
| tcp.srcport | Źródlowy port TCP | tcp.srcport == 12345 |
| tcp.dstport | Docelowy port TCP | tcp.dstport == 443 |
| udp.port | Port UDP (src lub dst) | udp.port == 53 |
| udp.srcport | Źródlowy port UDP | udp.srcport == 67 |
| udp.dstport | Docelowy port UDP | udp.dstport == 68 |
Uwaga: tcp.port to skrót od (tcp.srcport == X or tcp.dstport == X).
Filtrowanie według portów TCP i UDP jest niezbędne podczas analizy ruchu sieciowego, ponieważ pozwala na wyodrębnienie transmisji dla konkretnych usług. Podstawowe pole tcp.port sprawdza zarówno źródłowy, jak i docelowy port TCP, co jest skrótem od warunku tcp.srcport == X or tcp.dstport == X.
Analogicznie działa pole udp.port dla protokołu UDP. Jeśli potrzebna jest większa precyzja, można użyć osobnych pól dla portów źródłowych tcp.srcport i docelowych tcp.dstport. Filtrowanie po portach jest szczególnie przydatne przy identyfikacji ruchu dla serwerów WWW, DNS, DHCP i innych usług sieciowych.
Protokoły jako filtry
Wystarczy wpisać nazwę protokołu – Wireshark pokaże wszystkie pakiety zawierające ten protokół.
http
dns
dhcp
arp
icmp
tcp
udp
To najprostszy filtr – wpisz protokól i gotowe.
Najprostszym sposobem filtrowania w Wiresharku jest wpisanie nazwy protokołu w pasek filtrów, co spowoduje wyświetlenie wszystkich pakietów zawierających dany protokół. Aby wyświetlić tylko pakiety HTTP, wystarczy wpisać http, dla DNS wpisać dns, a dla ARP wpisać arp.
Jest to najszybsza i najbardziej intuicyjna metoda filtrowania, idealna na początek analizy. Wireshark automatycznie rozpoznaje protokoły na podstawie numerów portów i zawartości pakietów, dlatego wystarczy podać samą nazwę protokołu bez dodatkowych parametrów. Filtry protokołowe można łączyć z innymi warunkami dla bardziej precyzyjnych zapytań.
Filtry HTTP – podstawy
http.request.method == GET
http.request.method == POST
http.response.code == 200
http.response.code >= 400
http.response.code == 404
Wireshark rozróżnia http.request i http.response – to dwa różne zestawy pól.
Pamiętaj: http (sam protokół) znajdzie WSZYSTKIE pakiety HTTP. http.response.code znajdzie tylko odpowiedzi. Jeśli chcesz tylko żądania – użyj http.request.
Filtrowanie ruchu HTTP w Wiresharku pozwala na szczegółową analizę żądań i odpowiedzi między przeglądarką a serwerem WWW. Dostępne są osobne pola dla żądań http.request.method oraz odpowiedzi http.response.code, co umożliwia precyzyjne wyodrębnienie konkretnych typów transmisji.
Aby znaleźć tylko żądania GET, używamy http.request.method == GET, natomiast do wyszukania błędów serwera stosujemy http.response.code >= 400. Wireshark rozróżnia pakiety żądań i odpowiedzi na podstawie analizy nagłówków HTTP, co pozwala na stosowanie różnych filtrów dla każdego z tych typów pakietów w ramach jednej sesji.
Host i ścieżka w HTTP
http.host == example.com
http.request.uri contains "login"
http.request.uri == "/index.html"
http.user_agent contains "Mozilla"
http.content_type == "application/json"
contains działa case-sensitive – szuka dokładnie takiego podciągu.
W analizie ruchu HTTP często potrzebujemy filtrować według nazwy hosta lub ścieżki URI, co umożliwiają pola http.host i http.request.uri. Filtr http.host == example.com wyświetli wszystkie żądania kierowane do konkretnego serwera, niezależnie od ścieżki zasobu.
Operator contains jest szczególnie przydatny przy wyszukiwaniu fragmentów ścieżek, na przykład http.request.uri contains login znajdzie wszystkie żądania zawierające login w adresie URL. Należy pamiętać, że contains rozróżnia wielkość liter, więc w razie potrzeby można użyć funkcji upper lub lower do normalizacji.
Filtry DNS
dns.qry.name == www.example.com
dns.flags.response == 1
dns.flags.response == 0
dns.a == 93.184.216.34
dns.qry.type == 1
dns.qry.name contains "google"
dns.qry.name – tylko zapytańia. dns.resp.name – tylko odpowiedzi.
Filtrowanie zapytań DNS w Wiresharku pozwala na monitorowanie rozwiązywania nazw domenowych na adresy IP. Główne pole dns.qry.name służy do wyszukiwania zapytań o konkretną domenę, a dns.flags.response pozwala rozróżnić zapytańia od odpowiedzi.
Flaga response ustawiona na 0 oznacza zapytańie, a na 1 odpowiedź od serwera DNS. Dodatkowo można filtrować według typu zapytańia dns.qry.type, gdzie wartość 1 oznacza rekord A dla IPv4, a 28 dla AAAA dla IPv6. Szczególnie przydatne jest również pole dns.a do znajdowania odpowiedzi zawierających konkretny adres IP.
Filtry DHCP
dhcp.option.hostname == "laptop-student"
dhcp.option.requested_ip == 192.168.1.100
dhcp.option.dhcp_server == 192.168.1.1
dhcp.option.dhcp == 3
dhcp.option.client_mac == 00:11:22:33:44:55
DHCP używa protokołu BOOTP – filtr dhcp lub bootp działa.
Filtrowanie ruchu DHCP umożliwia śledzenie procesu przydzielania adresów IP przez serwer DHCP w sieci lokalnej. Podstawowe pole dhcp.option.dhcp określa typ komunikatu, gdzie wartość 1 to Discover, 2 to Offer, 3 to Request, a 5 to ACK.
Dzięki filtrom DHCP można znaleźć konkretnego klienta po nazwie hosta dhcp.option.hostname lub adresie MAC dhcp.option.client_mac. Protokół DHCP wykorzystuje BOOTP jako protokół transportowy, dlatego filtr dhcp działa tak samo jak bootp. Monitorowanie wymiany DHCP jest szczególnie przydatne przy diagnozowaniu problemów z przydzielaniem adresów IP w sieci.
Filtry ICMP (ping)
icmp.type == 8
icmp.type == 0
icmp.type == 3
icmp.type == 11
icmp.seq == 1
icmpv6.type == 128
Typy ICMP: 0=Echo Reply, 3=Dest Unreach, 5=Redirect, 8=Echo Request, 11=TTL Exceeded.
Do śledzenia traceroute – filtr icmp.type == 11 (Time Exceeded) lub icmp.type == 3 (Port Unreachable).
Filtrowanie protokołu ICMP jest niezbędne podczas diagnozowania problemów z łącznością sieciową, szczególnie przy użyciu narzędzi ping i traceroute. Najczęściej używane typy ICMP to typ 0 dla Echo Reply, typ 8 dla Echo Request oraz typ 3 dla Destination Unreachable.
Pole icmp.type określa typ komunikatu, a icmp.code dostarcza dodatkowych informacji o podtypie. Dla narzędzia traceroute kluczowe jest filtrowanie po icmp.type == 11 oznaczającym Time Exceeded, co pozwala śledzić trasę pakietów przez kolejne routery. W przypadku IPv6 dostępne są analogiczne pola z przedrostkiem icmpv6.
Flagi TCP w filtrach
tcp.flags.syn == 1
tcp.flags.ack == 1
tcp.flags.syn == 1 and tcp.flags.ack == 0
tcp.flags.syn == 1 and tcp.flags.ack == 1
tcp.flags.reset == 1
tcp.flags.fin == 1
tcp.flags.push == 1
tcp.flags.syn == 1 to standardowa skladnia. Mozna tez: tcp.flags & 0x02 (bitmask – dla zaawansowanych).
Flagi TCP w display filtrach pozwalają na precyzyjne filtrowanie pakietów na podstawie stanu połączenia TCP. Najważniejsze flagi to SYN oznaczający żądanie nawiązania połączenia, ACK potwierdzający otrzymanie danych, RST resetujący połączenie oraz FIN kończący transmisję.
Filtr tcp.flags.syn == 1 and tcp.flags.ack == 0 wyświetli tylko pierwsze pakiety SYN inicjujące nowe połączenie, co jest przydatne do wykrywania skanowania portów. Natomiast tcp.flags.syn == 1 and tcp.flags.ack == 1 pokaże pakiety SYN+ACK będące odpowiedzią serwera na żądanie połączenia. Flaga RST (tcp.flags.reset == 1) wskazuje na gwałtowne zerwanie połączenia.
SYN flood – praktyczny filtr
Atak SYN flood = wiele pakietów SYN z różnych portów źródłowych, bez finalizacji handshake.
Filtr do wykrycia podejrzanego ruchu SYN:
tcp.flags.syn == 1 and tcp.flags.ack == 0
tcp.flags & 0x02
Po zastosowaniu filtra – sortuj według adresu źródłowego. Jeśli jedno IP wysyła SYN do wielu portów w krótkim czasie – to skanowanie lub atak.
Statystyki: Statistics → Endpoints → zobacz liczbę pakietów na adres.
Atak SYN flood jest jednym z najczęstszych typów ataków DoS, polegającym na wysyłaniu ogromnej liczby pakietów SYN z fałszywych adresów źródłowych. Celem ataku jest wyczerpanie zasobów serwera poprzez zmuszenie go do utrzymywania wielu częściowo otwartych połączeń.
Do wykrycia SYN flood w Wiresharku używamy filtra tcp.flags.syn == 1 and tcp.flags.ack == 0, a następnie sortujemy pakiety według adresu źródłowego. Charakterystyczną cechą ataku jest wiele pakietów SYN pochodzących z jednego lub wielu adresów IP, kierowanych do różnych portów na serwerze w krótkim czasie. Statystyki w menu Statistics Endpoints pomagają zidentyfikować adres generujący podejrzany ruch.
TCP analysis – zaawansowana diagnostyka
Wireshark automatycznie analizuje strumienie TCP i dodaje pola analysis.
tcp.analysis.retransmission
tcp.analysis.duplicate_ack
tcp.analysis.zero_window
tcp.analysis.lost_segment
tcp.analysis.ack_lost_segment
tcp.analysis.window_update
tcp.analysis.fast_retransmission
Jeśli widzisz dużo tcp.analysis.retransmission (>2% ruchu) – masz problem z siecią (przeciążenie, błędy, zły link).
TCP analysis to zaawansowany mechanizm Wireshark, który automatycznie analizuje strumienie TCP i dodaje dodatkowe pola informacyjne do pakietów. Pola te zaczynają się od przedrostka tcp.analysis. i obejmują między innymi retransmission dla retransmisji, duplicate_ack dla zduplikowanych potwierdzeń oraz zero_window dla sytuacji, gdy odbiorca nie ma miejsca w buforze.
Filtr tcp.analysis.retransmission pozwala szybko znaleźć wszystkie pakiety, które zostały wysłane ponownie z powodu braku potwierdzenia. Wysoki odsetek retransmisji, powyżej 2% całego ruchu, wskazuje na poważne problemy z siecią, takie jak przeciążenie łącza, uszkodzone okablowanie lub wadliwe interfejsy sieciowe.
Analiza problemów TCP
tcp.analysis.flags
tcp.analysis.retransmission or tcp.analysis.duplicate_ack
tcp.analysis.retransmission and ip.src == 192.168.1.100
tcp.analysis.zero_window
tcp.analysis.retransmission and tcp.nxtseq
tcp.analysis.flags to zbiór wszystkich flag TCP analysis – szybki sposób na znalezienie problemów.
Praktyczne wykorzystanie pól tcp.analysis do diagnostyki sieciowej pozwala na szybkie identyfikowanie źródła problemów z wydajnością. Pole tcp.analysis.flags jest zbiorem wszystkich flag TCP analysis i stanowi wygodny skrót do wykrycia wszelkich nieprawidłowości w strumieniu TCP.
Po znalezieniu retransmisji warto sprawdzić, które IP jest odpowiedzialne za problem, używając filtra tcp.analysis.retransmission and ip.src == X. Jeśli retransmisje pochodzą od serwera, problem leży po stronie serwera lub sieci między klientem a serwerem. Dodatkowo warto sprawdzić pole tcp.analysis.zero_window, które informuje o przeciążeniu odbiorcy.
Filtry ARP
arp
arp.opcode == 1
arp.opcode == 2
arp.src.hw_mac == 00:11:22:33:44:55
arp.src.proto_ipv4 == 192.168.1.1
arp.duplicate-address-detected
Uwaga: arp.src.hw_mac to adres MAC nadawcy w pakiecie ARP, a eth.src to MAC w ramce Ethernet – zwykle te same, ale nie zawsze (w przypadku ARP spoofingu mogą być różne)!
arp.duplicate-address-detected to wbudowany test Wireshark – podświetla, gdy dwa różne MAC odpowiadają na ARP dla tego samego IP (spoofing!).
Filtrowanie pakietów ARP w Wiresharku jest przydatne do diagnozowania problemów z warstwą łącza danych i wykrywania ataków ARP spoofing. Pole arp.opcode określa typ komunikatu, gdzie wartość 1 oznacza żądanie ARP Request, a wartość 2 odpowiedź ARP Reply.
Do wykrywania ataków ARP spoofing służy wbudowane pole arp.duplicate-address-detected, które sygnalizuje sytuację, gdy dwa różne adresy MAC odpowiadają na zapytańie ARP dla tego samego adresu IP. Warto pamiętać, że adres MAC źródła w pakiecie ARP (arp.src.hw_mac) może różnić się od adresu MAC w ramce Ethernet (eth.src), co jest charakterystyczne dla ataków ARP spoofing.
Adresy MAC w filtrach
eth.src == 00:11:22:33:44:55
eth.dst == 00:11:22:33:44:55
eth.addr == 00:11:22:33:44:55
eth.dst == ff:ff:ff:ff:ff:ff
eth.dst[0] & 0x01
eth.src[0:3] == 00:1a:2b
eth.addr – sprawdza zarówno źródło, jak i cel.
Filtrowanie według adresów MAC w Wiresharku umożliwia analizę ruchu na poziomie warstwy łącza danych, czyli warstwy drugiej modelu OSI. Podstawowe pola to eth.src dla źródłowego adresu MAC, eth.dst dla docelowego oraz eth.addr, który sprawdza oba jednocześnie.
Filtr eth.dst == ff:ff:ff:ff:ff:ff wyświetli wszystkie ramki broadcast, które są wysyłane do wszystkich urządzeń w sieci lokalnej. Zaawansowani użytkownicy mogą filtrować według producenta karty sieciowej, używając składni eth.src[0:3] do porównania pierwszych trzech bajtów MAC, które stanowią unikalny identyfikator OUI producenta.
EtherType – typ protokołu w warstwie 2
eth.type == 0x0800
eth.type == 0x0806
eth.type == 0x86DD
eth.type == 0x8100
eth.type == 0x8864
Przydatne do wyodrębnienia ruchu konkretnego typu, gdy protokół nie jest rozpoznawany automatycznie.
Alternatywa: zamiast eth.type == 0x0800 – możesz wpisać po prostu ip.
Filtrowanie według pola EtherType pozwala na wyodrębnienie pakietów konkretnego protokołu na podstawie dwubajtowego identyfikatora w nagłówku ramki Ethernet. Standardowe wartości EtherType to 0x0800 dla IPv4, 0x0806 dla ARP, 0x86DD dla IPv6 oraz 0x8100 dla ramek VLAN 802.1Q.
Mimo że wygodniej jest używać nazw protokołów bezpośrednio, filtrowanie po EtherType jest przydatne w sytuacjach, gdy Wireshark nie rozpoznaje automatycznie protokołu lub gdy chcemy być pewni, że filtrujemy na najniższym możliwym poziomie warstwy drugiej. Alternatywnie zamiast eth.type == 0x0800 można po prostu wpisać ip.
Filtry według rozmiaru
frame.len > 1500
frame.len < 60
frame.len >= 200 and frame.len <= 500
frame.cap_len < frame.len
frame.cap_len < frame.len
Przydatne do wykrywania:
- Malych pakietów (SYN flood, skanowanie)
- Duych pakietów (transfery plików, MTU discovery)
frame.cap_len != frame.len oznacza, że snaplen był mniejszy niż pakiet – część danych została obcięta.
Filtrowanie według długości ramki jest przydatne do wykrywania określonych typów ruchu sieciowego. Bardzo małe pakiety o długości poniżej 60 bajtów mogą wskazywać na atak SYN flood lub skanowanie portów, podczas gdy pakiety o maksymalnym rozmiarze MTU są charakterystyczne dla transferów plików.
Pole frame.len określa całkowitą długość ramki wraz ze wszystkimi nagłówkami, natomiast frame.cap_len to faktycznie przechwyćona długość. Różnica między tymi wartościami oznacza, że parametr snaplen podczas przechwytywania był mniejszy niż rzeczywisty rozmiar pakietu, co skutkuje obcięciem części danych. Do filtrowania zakresów długości używamy operatorów >= i <=.
Filtry czasowe i numeryczne
frame.number == 42
frame.number >= 100 and frame.number <= 200
frame.time_relative > 10
frame.time_delta > 1
frame.time >= "2024-01-15 14:30:00" and frame.time <= "2024-01-15 14:31:00"
frame.time_delta – czas od poprzedniego pakietu. Przydatne do znajdowania opóznien.
frame.time_relative – czas od poczatku przechwyćenia.
Filtrowanie według czasu i numeru pakietu pozwala na precyzyjne lokalizowanie zdarzeń w przechwyćonym ruchu sieciowym. Podstawowe pole frame.number wskazuje unikalny numer kolejny pakietu w pliku przechwyćenia, co ułatwia nawigację między powiązanymi pakietami.
Pola frame.time_relative i frame.time_delta są szczególnie przydatne w diagnostyce opóźnień sieciowych. Pierwsze mierzy czas od początku przechwyćenia, drugie odstęp czasu od poprzedniego pakietu. Filtr frame.time_delta > 1 znajdzie pakiety, które pojawiły się z ponad sekundowym opóźnieniem w stosunku do poprzedniego, co może wskazywać na problemy z wydajnością sieci.
Pakiety oznaczone przez użytkownika
frame.marked
frame.comment
frame.comment contains "sprawdz"
frame.ignored
Markowanie: Ctrl+M na wybranym pakiecie.
Komentarze: Ctrl+Alt+C – dodaj notatke (zapisywana tylko w pcapng).
Ignorowanie: Ctrl+D – pakiet znika z analiz.
Komentarze do pakietów są bezcenne przy współpracy: "To jest SYN flood – sprawdź źródło 10.0.0.5". Zapisz jako pcapng, żebyś nie stracił notatek!
Wireshark umożliwia oznaczanie pakietów specjalnymi znacznikami, co ułatwia organizację pracy podczas analizy dużych zbiorów danych. Pakiet można oznaczyć jako marked za pomocą skrótu Ctrl+M, dodać do niego komentarz przez Ctrl+Alt+C lub zignorować przez Ctrl+D.
Do filtrowania oznaczonych pakietów służy pole frame.marked, a pakietów z komentarzami frame.comment. Można również wyszukiwać pakiety według treści komentarza za pomocą frame.comment contains tekst. Komentarze są zapisywane tylko w formacie pcapng, dlatego warto używać tego formatu podczas wspólnej pracy nad analizą ruchu sieciowego.
Szukanie wzorca w treści
contains – sprawdza czy pole (lub surowe dane) zawiera podany string (case-sensitive).
http contains "password"
data contains "union"
http.request.uri contains "admin"
http.file_data contains "# Szukaj w calym pakiecie (wszystkie warstwy)
frame contains "secret"
contains dziala na dowolnym polu, które ma reprezentacje tekstowa.
contains rozróżnia wielkość liter! "Password" != "password". Użyj matches z flagą (?i) dla case-insensitive.
Operator contains w display filtrach Wireshark służy do wyszukiwania podciągów znaków w polach protokołów lub surowej zawartości pakietów. Jest to niezwykle przydatne narzędzie podczas analizy ruchu HTTP, gdzie można szukać określonych słów kluczowych w żądaniach i odpowiedziach.
Aby znaleźć wszystkie pakiety zawierające słowo password w treści HTTP, używamy filtra http contains password. Operator contains działa na dowolnym polu posiadającym reprezentację tekstową, a także na całej ramce za pomocą frame contains. Należy pamiętać, że contains rozróżnia wielkość liter, co oznacza, że Password nie zostanie znalezione przez zapytańie zawierające password.
Wyrażenia regularne w filtrach
matches – dopasowuje wzorzec regex (PCRE – Perl Compatible Regular Expressions).
http.request.uri matches "\.php\?id=\d+"
http contains "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
http matches "(?i)password"
frame matches "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"
matches jest najbardziej elastyczny, ale tez najwolniejszy.
matches jest WYRAŹNIE wolniejszy niż contains. Używaj tylko gdy contains nie wystarczy. Regex kompiluje się dla każdego pakietu!
Operator matches w display filtrach Wireshark umożliwia używanie wyrażeń regularnych zgodnych ze standardem PCRE do wyszukiwania złożonych wzorców w danych sieciowych. Jest to najbardziej elastyczny, ale jednocześnie najwolniejszy operator, ponieważ dla każdego pakietu wyrażenie regularne jest kompilowane od nowa.
Aby wykonać wyszukiwanie bez rozróżniania wielkości liter, na początku wzorca dodajemy flagę (?i), na przykład http matches (?i)password. Przykładowo matches pozwala na znajdowanie adresów email w treści pakietów za pomocą wzorca [a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}. Zaleca się używanie matches tylko wtedy, gdy prostsze operatory nie wystarczają.
Funkcje w filtrach wyświetlania
Filtry wyświetlania obsługują funkcje na polach:
| Funkcja | Opis | Przykład |
| upper() | zamien na wielkie litery | upper(http.request.method) == "GET" |
| lower() | zamien na male litery | lower(http.host) == "example.com" |
| count() | zlicza wystapienia pola w ramce | count(ip.addr) > 2 |
| len() | długość lancucha | len(http.request.uri) > 100 |
| min() | mniejsza z dwoch wartosci | min(tcp.srcport, tcp.dstport) <= 1024 |
| max() | większa z dwoch wartosci | max(tcp.srcport, tcp.dstport) > 1024 |
| abs() | wartosc bezwzgledna | abs(tcp.analysis.ack_rtt) > 0.1 |
Uwaga: funkcje count(), min(), max(), abs() działają na pojedynczej ramce, a nie na grupach pakietów. Funkcje agregujące (suma, średnia) są dostępne w Statistics → IO Graphs, nie w filtrach wyświetlania.
Uwaga: funkcje count, min, max, abs działają na pojedynczej ramce, a nie na grupach pakietów. Do agregacji po strumieniach użyj Statistics → IO Graphs.
Display filtry w Wiresharku obsługują funkcje na polach, które można podzielić na dwie grupy: funkcje konwersji oraz funkcje porównania. Funkcje upper i lower służą do zamiany tekstu na wielkie lub małe litery, co jest przydatne przy porównaniach bez rozróżniania wielkości liter. Funkcja len() zwraca długość łańcucha, a count() zlicza wystąpienia pola w pojedynczej ramce.
Funkcje min() i max() zwracają mniejszą/większą z podanych wartości w jednym wyrażeniu, a abs() zwraca wartość bezwzględną. W przeciwieństwie do statystyk w IO Graphs, funkcje display filtrów nie działają agregująco na grupach pakietów. Do sumowania i średnich warto użyć Statistics → IO Graphs lub Statistics → TCP Stream Graphs.
Filtrowanie całych warstw
Możesz filtrować po zawartości całej warstwy protokołu:
ip contains "192"
frame contains "HTTP"
tcp contains "GET"
data contains "
To nie to samo co http contains – ip contains "192" szuka w całej warstwie IP, nie tylko w adresie.
Uwaga: ip contains nie sprawdza ip.src ani ip.dst – szuka w bajtach warstwy IP.
Filtrowanie całych warstw protokołów w Wiresharku pozwala na wyszukiwanie wzorców w surowych danych warstw sieciowych, nie tylko w konkretnych polach. Na przykład ip contains 192 przeszuka całą warstwę IP, włączając nagłówek i payload, w poszukiwaniu ciągu 192, podczas gdy ip.src == 192.168.1.1 sprawdza tylko pole źródłowego adresu IP.
Należy pamiętać, że contains na całej warstwie jest wolniejszy niż porównanie konkretnego pola, ponieważ przeszukuje wszystkie bajty warstwy. Filtrowanie warstw jest przydatne w sytuacjach, gdy szukamy danych aplikacji bez znajomości konkretnego protokołu warstwy wyższej, na przykład data contains
Filtry dla sieci VLAN (802.1Q)
vlan.id == 100
vlan.priority == 5
vlan.id >= 10 and vlan.id <= 20
vlan
not vlan
VLAN ID: 0–4095 (standard 802.1Q).
Priorytet: 0–7 (dla QoS).
Przydatne w sieciach korporacyjnych z wieloma VLAN-ami.
Jeśli przechwytujesz na interfejsie z VLAN trunk – wszystkie pakiety mają tag VLAN. Użyj vlan.id, aby wyodrębnić konkretny VLAN.
Filtrowanie ruchu VLAN w Wiresharku jest niezbędne w środowiskach korporacyjnych, gdzie sieć jest podzielona na wiele wirtualnych sieci lokalnych. Podstawowe pole vlan.id przechowuje identyfikator VLAN w zakresie od 0 do 4095, co pozwala na precyzyjne wyodrębnienie ruchu z konkretnej sieci wirtualnej.
Dodatkowo dostępne jest pole vlan.priority określające priorytet CoS w zakresie 0-7, używany do zarządzania jakością usług QoS. Filtr not vlan wyświetla pakiety bez znacznika VLAN, co jest przydatne przy porównywaniu ruchu z różnych segmentów sieci. W środowiskach z trunkiem wszystkie pakiety mają tag VLAN, dlatego kluczowe jest filtrowanie po vlan.id.
Filtry dla IPv6
ipv6.src == fe80::1
ipv6.dst == 2001:db8::1
ipv6.addr == ::1
ipv6.hlim == 1
ipv6.nxt == 6
ipv6.addr contains "ff02"
IPv6 ma własne pola: ipv6.src, ipv6.dst, ipv6.addr.
W sieciach z IPv6 możesz filtrowaæ po ipv6.addr == X, a klasyczny ip.addr lapie tylko IPv4. Uzyj ip.addr lub ipv6.addr w zalezności od potrzeb.
Filtrowanie ruchu IPv6 w Wiresharku wykorzystuje własne pola protokołu IPv6, które różnią się od pól IPv4. Do dyspozycji są ipv6.src dla źródłowego adresu IPv6, ipv6.dst dla docelowego oraz ipv6.addr dla obu kierunków, co pozwala na precyzyjną analizę ruchu w sieciach nowej generacji.
Pole ipv6.hlim odpowiada za Hop Limit, który pełni tę samą funkcję co TTL w IPv4, ograniczając maksymalną liczbę przeskoków między routerami. Pole ipv6.nxt określa następny nagłówek, wskazując protokół warstwy wyższej, na przykład 6 dla TCP. W przeciwieństwie do IPv4, adresy IPv6 mogą być filtrowane za pomocą contains do wyszukiwania wzorców, na przykład ipv6.addr contains ff02.
Filtry dla ruchu szyfrowanego
tls
tls.handshake.type == 1
tls.handshake.type == 2
tls.handshake.extensions_server_name contains "example"
tls.record.version == 0x0303
tls.record.version == 0x0304
tls.record.content_type == 23
tls.handshake.certificate contains "example.com"
Uwaga: Wireshark może odczytać tylko metadane TLS (SNI, wersje, certyfikaty) – treść jest zaszyfrowana.
Do odszyfrowania TLS potrzebujesz kluczy sesji (SSLKEYLOGFILE) lub klucza prywatnego serwera. SNI jest zawsze widoczne – nawet w TLS 1.3.
Filtrowanie ruchu TLS w Wiresharku pozwala na analizę metadanych połączeń szyfrowanych, nawet gdy nie mamy dostępu do kluczy deszyfrujących. Pole tls.handshake.extensions_server_name umożliwia odczytanie nazwy serwera SNI z komunikatu Client Hello, co jest przydatne przy identyfikacji docelowych serwisów.
Można również filtrować według wersji TLS za pomocą tls.record.version, gdzie 0x0303 oznacza TLS 1.2, a 0x0304 TLS 1.3. Pole tls.handshake.type pozwala na wyodrębnienie poszczególnych etapów uzgadniania połączenia, na przykład typ 1 dla Client Hello i typ 2 dla Server Hello. Do odszyfrowania treści potrzebne są klucze sesji z SSLKEYLOGFILE.
Maska bitowa – precyzyjne filtrowanie flag
Mozna uzyc operatora & (bitwise AND) do filtrowania pojedynczych bitów:
tcp.flags & 0x02
tcp.flags & 0x12 == 0x12
tcp.flags & 0x04
eth.dst[0] & 0x01
ip.flags & 0x02
Skladnia: pole & maska == wartosc lub po prostu pole & maska (sprawdza czy != 0).
Bitmaski są wydajniejsze niż tcp.flags.syn == 1, ale mniej czytelne. Używaj dla zaawansowanych scenariuszy.
Filtrowanie za pomocą masek bitowych w Wiresharku pozwala na precyzyjne testowanie poszczególnych bitów w polach protokołów. Operator & wykonuje operację bitowego AND między wartością pola a maską, co umożliwia sprawdzenie stanu konkretnych flag bez konieczności używania wielu warunków.
Na przykład tcp.flags & 0x02 sprawdza, czy ustawiony jest bit SYN w nagłówku TCP, co jest równoważne tcp.flags.syn == 1. Bardziej zaawansowany przykład tcp.flags & 0x12 == 0x12 sprawdza jednocześnie flagi SYN i ACK. Maski bitowe są wydajniejsze, ponieważ wykonują pojedynczą operację, ale są mniej czytelne dla osób niezaznajomionych z zapisem heksadecymalnym.
Budowanie złożonych filtrów
Przykład: znajdź pakiety HTTP z błędem 500 od serwera 10.0.0.1 z wykluczeniem obrazków:
http.response.code >= 500 and ip.src == 10.0.0.1 and not http.request.uri contains ".jpg" and not http.request.uri contains ".png"
Inny przykład: znajdź retransmisje TCP dla sesji z portem 80:
tcp.analysis.retransmission and (tcp.port == 80 or tcp.port == 8080)
Zawsze grupuj warunki nawiasami – poprawia czytelność i zapobiega błędom.
Łańcuchy filtrów czyli budowanie złożonych wyrażeń z wielu warunków to zaawansowana technika analizy ruchu sieciowego w Wiresharku. Poprawne łączenie warunków za pomocą operatorów logicznych i nawiasów pozwala na tworzenie precyzyjnych zapytań, które wyodrębniają dokładnie te pakiety, które są potrzebne do diagnostyki.
Przykładem złożonego filtra jest http.response.code >= 500 and ip.src == 10.0.0.1 and not http.request.uri contains .jpg, który znajdzie błędy serwera dla konkretnego adresu z wykluczeniem żądań o obrazki. Zawsze warto grupować warunki nawiasami, co nie tylko zapobiega błędom logicznym, ale także znacząco poprawia czytelność filtra dla innych analityków.
Zakładki z filtrami
Wireshark pozwala zapisywac filtry jako przyciski (zakadki) w pasku filtrow.
Jak dodać:
- Wpisz filtr w pasek filtrow
- Kliknij przycisk "+" (Add Display Filter Button) po lewej stronie paska
- Wpisz nazwe (np. "HTTP errors") i opcjonalnie skrót klawiszowy (Alt+1...)
- Kliknij OK
Zapisane filtry sa widoczne jako przyciski nad paskiem filtrow.
Zarządzanie: Analyze → Display Filter Buttons – edycja, usuwanie, kolejnosc.
Używaj Alt+1... Alt+0 jako skrótów do najczęściej używanych filtrów. Oszczędza mnóstwo czasu!
Filtry przyciskowe to wygodny mechanizm w Wiresharku umożliwiający zapisywanie często używanych filtrów jako klikalnych przycisków nad paskiem filtrów. Aby dodać taki przycisk, wystarczy wpisać filtr, a następnie kliknąć przycisk + po lewej stronie paska i nadać mu nazwę.
Do każdego przycisku można przypisać skrót klawiszowy Alt+1 aż do Alt+0, co pozwala na błyskawiczne przełączanie między najczęściej używanymi filtrami. Zarządzanie przyciskami odbywa się przez Analyze Display Filter Buttons, gdzie można edytować, usuwać i zmieniać kolejność zapisanych filtrów. To ogromne ułatwienie podczas codziennej pracy z Wiresharkiem.
Makra filtrów
Display Filter Macros – definiuj własne aliasy dla często uzywanych filtrow.
Konfiguracja: Analyze → Display Filter Macros → "+".
Przykład makra:
- Nazwa: http_errors
- Tekst: http.response.code >= 400
Uzycie w pasku filtrow: ${http_errors}
W efekcie ${http_errors} rozwijane jest do http.response.code >= 400.
Makra mogą byc zagniezdzone – makro może zawierac inne makra.
Makra są zapisywane w profilu – możesz mieć różne zestawy makr dla różnych scenariuszy (analiza HTTP, WLAN, bezpieczeństwo).
Display Filter Macros to zaawansowany mechanizm w Wiresharku pozwalający na definiowanie własnych aliasów dla często używanych filtrów. Konfiguracja makr odbywa się w Analyze Display Filter Macros, gdzie można nadać nazwę i przypisać do niej wyrażenie filtrujące.
Po zdefiniowaniu makra można je wywołać w pasku filtrów za pomocą składni , na przykład zostanie rozwinięte do http.response.code >= 400. Makra mogą być zagnieżdżane, co oznacza, że jedno makro może zawierać inne. Są one zapisywane w profilu użytkownika, co pozwala na tworzenie różnych zestawów makr dla różnych scenariuszy analizy.
Gotowce w Analyze → Display Filters
Wireshark ma wbudowana biblioteke gotowych filtrow:
Analyze → Display Filters (lub Display Filter Buttons → Manage).
Przykłady predefiniowanych filtrow:
- HTTP: http
- DNS: dns
- DHCP: bootp
- ARP: arp
- ICMP: icmp
- TCP SYN: tcp.flags.syn == 1
- TCP RST: tcp.flags.reset == 1
Możesz je edytować, dodawać własne, organizować w grupy.
Wireshark zawiera wbudowaną bibliotekę predefiniowanych filtrów, dostępną z poziomu Analyze Display Filters. Zawiera ona gotowe filtry dla najpopularniejszych protokołów i scenariuszy, takich jak http, dns, dhcp, arp, icmp oraz tcp.flags.syn == 1 czy tcp.flags.reset == 1.
Predefiniowane filtry można edytować, dostosowywać do własnych potrzeb i organizować w grupy tematyczne. Jest to szczególnie przydatne dla początkujących użytkowników, którzy dopiero uczą się składni display filtrów. Zaawansowani użytkownicy mogą rozszerzać tę bibliotekę o własne filtry, tworząc spersonalizowany zestaw narzędzi do codziennej analizy ruchu sieciowego.
Jak Wireshark pomaga?
Podczas wpisywania filtra Wireshark daje natychmiastowa informacje zwrotna:
- Zielony pasek: filtr poprawny skladniowo
- óty pasek: filtr poprawny, ale może dziac wolno (contains/matches na duym zbiorze)
- Czerwony pasek: blad skladni – filtr nie zostanie zaakceptowany
Autouzupelnianie (Ctrl+Space) – podpowiada nazwy pol, operatorów, wartosci.
Jeśli wpiszesz "ip." – zobaczysz liste pól IP (ip.src, ip.dst, ip.ttl itd.).
Autouzupełnianie w pasku filtrów Wireshark to jedna z najbardziej użytecznych funkcji ułatwiających tworzenie poprawnych display filtrów. Po wpisaniu nazwy protokołu i kropki, na przykład ip., pojawia się lista wszystkich dostępnych pól dla tego protokołu, co znacznie przyspiesza pracę.
Wireshark zapewnia również natychmiastową walidację składni filtra za pomocą kolorowego paska. Zielony kolor oznacza filtr poprawny składniowo, żółty informuje, że filtr jest poprawny, ale może działać wolno ze względu na użycie contains lub matches, a czerwony sygnalizuje błąd składni, który uniemożliwia zastosowanie filtra. Skrót Ctrl+Space otwiera podpowiedzi autouzupełniania.
Najczęstsze błędy składni
| Bledny filtr | Blad | Poprawiony |
| ip.src = 192.168.1.1 | Uzyto = zamiast == | ip.src == 192.168.1.1 |
| ip.src == 192.168.1 | Niepeny adres IP | ip.src == 192.168.1.1 |
| http res.code == 200 | Brak kropki (pole w dwóch sowach) | http.response.code == 200 |
| tcp.port == "80" | Cudzysów dla liczby | tcp.port == 80 |
| tcp.port == 80, udp.port == 53 | Przecinek zamiast or | tcp.port == 80 or udp.port == 53 |
Wiekszosc bledów wynika z mylenia skladni display filter z innymi jezykami.
Jeśli filtr jest czerwony – kliknij w pasek i sprawdź podpowiedź. Wireshark zazwyczaj sugeruje poprawkę.
Najczęstsze błędy składniowe w display filtrach wynikają z mylenia składni Wireshark z innymi językami. Użycie pojedynczego znaku = zamiast ==, brak kropki w nazwie pola, cudzysłów dla wartości liczbowych czy przecinek zamiast or to typowe pomyłki popełniane przez początkujących użytkowników.
Większość błędów jest natychmiast wychwytywana przez walidator Wireshark, który sygnalizuje problem czerwonym paskiem. Kliknięcie w czerwony pasek często wyświetla podpowiedź z sugerowaną poprawką. Warto zapamiętać, że adresy IP nie wymagają cudzysłowu, liczby zapisujemy bez cudzysłowu, a stringi w cudzysłowie tylko gdy zawierają spacje.
Sprawdzanie przynależności do zbioru
Operator in pozwala sprawdzic, czy pole należy do zbioru wartosci:
ip.src in {10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16}
tcp.port in {80, 443, 8080}
eth.addr in {00:11:22:33:44:55, 00:aa:bb:cc:dd:ee}
ip.src in 10.0.0.0/8
Zbiór podajemy w nawiasach klamrowych {}, elementy oddzielone przecinkami.
Dla adresów IP dziala maska CIDR – to bardzo wydajne.
Operator "in" jest wygodniejszy i czytelniejszy niż długie łańcuchy warunków z "or". Zamiast ip.src == X or ip.src == Y – użyj ip.src in {X, Y}.
Operator in w display filtrach umożliwia sprawdzenie, czy pole należy do zbioru wartości, co jest wygodniejszą alternatywą dla długich łańcuchów warunków z operatorem or. Zbiór wartości podaje się w nawiasach klamrowych, oddzielając elementy przecinkami.
Operator in obsługuje różne typy danych, w tym adresy IP z notacją CIDR, co pozwala na sprawdzenie przynależności do podsieci. Na przykład tcp.port in {80, 443, 8080} wyświetli ruch HTTP i HTTPS, a ip.src in {10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16} znajdzie ruch z adresów prywatnych. Jest to nie tylko czytelniejsze, ale często również wydajniejsze niż wiele warunków or.
Filtry dla sieci bezprzewodowych (802.11)
wlan.fc.type == 0
wlan.fc.type_subtype == 0x08
wlan.fc.type_subtype == 0x04
wlan.fc.type_subtype == 0x05
wlan.sa == 00:11:22:33:44:55
wlan.da == ff:ff:ff:ff:ff:ff
wlan.bssid == 00:11:22:33:44:55
wlan_radio.channel == 6
Do analizy WLAN potrzebujesz trybu monitor na karcie.
Beacon frames (typ 0x08) – wysylane przez AP co 100 ms. Filtr wlan.fc.type_subtype == 0x08 pokaze wszystkie sieci Wi-Fi w okolicy.
Filtrowanie ruchu w sieciach bezprzewodowych 802.11 w Wiresharku wymaga znajomości specyficznych pól protokołu WLAN. Podstawowe pole wlan.fc.type określa typ ramki, gdzie 0 oznacza ramki zarządzające, 1 kontrolne, a 2 dane, natomiast wlan.fc.type_subtype precyzuje podtyp ramki.
Do analizy sieci Wi-Fi szczególnie przydatne jest filtrowanie ramek Beacon za pomocą wlan.fc.type_subtype == 0x08, które są wysyłane przez punkty dostępowe co około 100 milisekund. Pole wlan.bssid identyfikuje punkt dostępowy, a wlan_radio.channel pozwala na filtrowanie według kanału. Do przechwytywania ramek WLAN potrzebny jest tryb monitor na karcie sieciowej.
Błędy i ostrzeżenia Wireshark
Wireshark oznacza pakiety z problemami specjalnymi polami:
_ws.malformed
_ws.short
_ws.expert
_ws.expert.severity == 1
_ws.expert.severity == 2
_ws.expert.group == 2
_ws.expert.message contains "retransmission"
_ws – przedrostek dla pól dodawanych przez Wireshark (nie pochodza z protokołu).
_ws.malformed i _ws.expert to pierwsze filtry, które stosujesz, gdy szukasz problemów w sieci.
Wireshark oznacza pakiety z problemami za pomocą specjalnych pól z przedrostkiem _ws, które są dodawane przez analizator, a nie pochodzą bezpośrednio z protokołów sieciowych. Pole _ws.malformed wskazuje na pakiety, które mają nieprawidłową strukturę niezgodną ze specyfikacją protokołu.
Pole _ws.short oznacza pakiety przycięte, które są krótsze niż deklarowana długość, co może wynikać z błędów sieci lub niepełnego przechwyćenia. _ws.expert to zbiór wszystkich komunikatów Expert Info, który można dalej precyzować za pomocą _ws.expert.severity dla poziomu ważności lub _ws.expert.group dla grupy problemów. Te filtry są pierwszym wyborem podczas diagnostyki problemów sieciowych.
Expert Info – komunikaty diagnostyczne
Analyze → Expert Info (lub Ctrl+Alt+Shift+E) – okno z podsumowaniem wszystkich problemów.
Expert Info dzieli się na:
- Errors: bledy (np. malformed packet, bad checksum)
- Warnings: ostrzezenia (np. retransmisja, zero window, duplicate ACK)
- Notes: uwagi (np. TCP window update, TIME_WAIT)
- Chat: informacje (np. pierwszy SYN, handshake complete)
Dla kazdego komunikatu – pole _ws.expert.message z trescia.
Display filter dla konkretnego komunikatu:
_ws.expert.severity == 2
_ws.expert.message contains "Retransmission"
Expert Info to centrum dowodzenia diagnostyka – zamiast ręcznie szukaæ problemów, otwórz to okno i zobacz wszystkie problemy na licie.
Okno Expert Info dostępne z menu Analyze lub skrótem Ctrl+Alt+Shift+E stanowi centrum dowodzenia diagnostyką sieciową w Wiresharku. Zawiera ono podsumowanie wszystkich komunikatów diagnostycznych podzielonych na cztery kategorie: Errors, Warnings, Notes i Chat.
Kategoria Errors zawiera błędy krytyczne takie jak nieprawidłowa suma kontrolna, Warnings to ostrzeżenia o retransmisjach czy zerowym oknie, Notes to uwagi o aktualizacjach okna TCP, a Chat to informacje o zdarzeniach takich jak pierwszy SYN. Każdy komunikat ma przypisane pole _ws.expert.message z opisem, co pozwala na filtrowanie konkretnych typów problemów.
Filtrowanie po strumieniach
Wireshark numeruje strumienie TCP/UDP – możesz filtrować po numerze strumienia:
tcp.stream == 0
tcp.stream >= 5 and tcp.stream <= 10
udp.stream == 3
tcp.stream eq 0 and ip.addr == 10.0.0.1
Numer strumienia możesz odczytać: prawy-klik → Follow → TCP Stream – w tytule okna jest numer.
Przydatne do wyodrebnienia konkretnej sesji z duzej liczby pakietów.
tcp.stream == 0 to pierwszy strumien w pliku. Jeśli chcesz wyodrebnice konkretna sesje – uzyj Follow TCP Stream, zobacz numer, potem wpisz filtr tcp.stream == N.
Filtrowanie według strumieni TCP i UDP w Wiresharku pozwala na wyodrębnienie całej sesji komunikacyjnej między dwoma hostami. Każdej sesji TCP lub UDP przypisywany jest unikalny numer, który można wykorzystać w filtrze tcp.stream lub udp.stream.
Numer strumienia można łatwo odczytać po użyciu funkcji Follow TCP Stream, która wyświetla zawartość sesji w osobnym oknie. Filtrowanie po strumieniach jest szczególnie przydatne przy analizie dużych plików przechwyćeń, gdzie chcemy skupić się na konkretnej sesji bez rozpraszania się innymi pakietami. Zakres strumieni można również określić za pomocą operatorów porównania.
Własne reguły kolorowania na podstawie filtrów
Możesz stworzyć regule kolorowania, która uzywa display filtra:
View → Coloring Rules → "+"
Przykłady reguy:
| Nazwa reguy | Display filter | Kolor |
| SQL Injection | http.request.uri contains "union" or http.request.uri contains "select" | Czerwony |
| Wysokie opóznienie | frame.time_delta > 1 | Pomaraczowy |
| Retransmisje | tcp.analysis.retransmission | Fioletowy |
| DNS queries | dns.flags.response == 0 | Jasnoniebieski |
Reguy sprawdzane sa od góry – pierwsze dopasowanie wygrywa.
Łączenie filtrów wyświetlania z koloryzacją to potężne narzędzie – od razu widzisz problemy bez wpisywania filtra. Załóż profil z regułami kolorowania dla typowych analiz.
Wireshark umożliwia tworzenie własnych reguł kolorowania pakietów na podstawie display filtrów, co znacząco ułatwia wizualną identyfikację problemów w ruchu sieciowym. Reguły kolorowania konfiguruje się w View Coloring Rules, gdzie każda reguła składa się z nazwy, filtra i wybranego koloru.
Reguły są sprawdzane od góry do dołu, a pierwsze dopasowanie decyduje o kolorze pakietu. Przykładowa reguła dla retransmisji TCP może używać filtra tcp.analysis.retransmission z kolorem czerwonym, a dla wysokich opóźnień frame.time_delta > 1 z kolorem pomarańczowym. Połączenie display filtrów z kolorowaniem pozwala na błyskawiczne zauważenie problemów bez konieczności ręcznego wpisywania filtrów.
Które filtry są wolne?
Nie wszystkie filtry dzialaja równie szybko. Oto ranking wydajności:
| Szybko | Operator/przykad | Uwagi |
| ★★★ Bardzo szybki | ==, !=, >, <, ip.addr, tcp.port | Porównanie indeksowanych pól |
| ★★☆ redni | in {}, protokoy (http, dns) | Sprawdza wiele wartoci |
| ★☆☆ Wolny | contains, data contains | Szukanie podcigu w danych |
| ☆☆☆ Bardzo wolny | matches (regex) | Kompilacja regex dla kadego pakietu |
Złote zasady wydajności:
- Używaj == zamiast contains, gdy możesz
- Unikaj matches na dużych zbiorach (>100k pakietów)
- Najpierw zawęź zakres (ip.addr, tcp.port), potem contains/matches
contains na polu frame (cała ramka) jest szczególnie wolny – ogranicz najpierw protokołem: http contains "pass" jest szybsze niż frame contains "pass".
Wydajność display filtrów w Wiresharku różni się znacząco w zależności od użytych operatorów i pól. Najszybsze są operatory porównania ==, !=, >, < działające na indeksowanych polach, natomiast najwolniejsze jest matches wymagające kompilacji wyrażenia regularnego dla każdego pakietu.
Złote zasady wydajności to używanie == zamiast contains gdy to możliwe, unikanie matches na zbiorach powyżej 100 tysięcy pakietów oraz zawężanie zakresu najpierw przez ip.addr lub tcp.port przed użyciem contains lub matches. contains na całej ramce frame contains jest szczególnie wolny, dlatego warto ograniczyć wyszukiwanie do konkretnego protokołu, na przykład http contains zamiast frame contains.
Najczęstsze błędy logiczne
1. == vs contains
http.host == "example.com" – tylko dokadnie "example.com".
http.host contains "example" – kady host zawierajcy "example" (np. "www.example.com", "example.org").
2. Wielko liter
Zarówno == jak i contains są case-sensitive:
http.request.method == "get" – NIE znajdzie "GET".
Rozwiązanie: upper(http.request.method) == "GET" lub matches z (?i).
3. ip.addr vs ip.src / ip.dst
ip.addr == X – pakiet, w którym źródło LUB cel == X.
ip.src == X and ip.dst == X – pakiet od X do X (ten sam IP).
Gdy filtr nie znajduje spodziewanych pakietów – sprawdź wielkość liter! "GET" != "get". Użyj upper() lub (?i).
Najczęstsze pułapki przy używaniu display filtrów wynikają z różnic między operatorami oraz rozróżniania wielkości liter. Operator == wymaga dokładnego dopasowania, podczas gdy contains znajdzie podciąg w dłuższym tekście, co prowadzi do różnych wyników dla pozornie podobnych zapytań.
Drugą częstą pułapką jest używanie ip.addr zamiast ip.src lub ip.dst. ip.addr == X znajdzie pakiety, gdzie źródło LUB cel to X, podczas gdy ip.src == X and ip.dst == X wymaga, aby ten sam adres występował zarówno jako źródło, jak i cel. Aby poradzić sobie z rozróżnianiem wielkości liter, można użyć funkcji upper lub lower, na przykład upper(http.request.method) == GET.
Filtr do wykrycia SQL Injection
SQL Injection – atak polegający na wstrzyknięciu kodu SQL do zapytańia HTTP.
Display filter do wykrycia typowych wzorców:
http.request.uri contains "union" or
http.request.uri contains "select" or
http.request.uri contains "insert" or
http.request.uri contains "drop" or
http.request.uri contains "1=1" or
http.request.uri contains "or 1=1" or
http.request.uri contains "--" or
http.request.uri contains "/*"
Po znalezieniu podejrzanych pakietów – użyj Follow TCP Stream, aby zobaczyć pełne żądanie
Dodaj regułę kolorowania dla tych filtrów – od razu zobaczysz ataki.
To tylko podstawowy filtr – prawdziwe ataki SQL Injection mogą używać enkodowania (URL, base64). Użyj matches dla bardziej zaawansowanych wzorców.
Wykrywanie ataków SQL Injection za pomocą Wireshark polega na analizie żądań HTTP pod kątem typowych wzorców wstrzykiwania kodu SQL. Podstawowy filtr sprawdza, czy URI żądania zawiera słowa kluczowe takie jak union, select, insert, drop, 1=1, -- lub /*, które są charakterystyczne dla ataków SQL Injection.
Po znalezieniu podejrzanych pakietów zaleca się użycie Follow TCP Stream, aby zobaczyć pełną treść żądania i potwierdzić atak. Dodanie reguły kolorowania dla tych filtrów pozwala na natychmiastowe wizualne wykrycie ataków podczas analizy na żywo. Należy pamiętać, że atakujący mogą używać enkodowania URL lub base64, co wymaga bardziej zaawansowanych filtrów z wyrażeniami regularnymi.
Filtr do analizy SSH
SSH jest szyfrowane – nie zobaczysz treści, ale możesz analizować metadane.
Display filtr dla ruchu SSH:
tcp.port == 22
tcp.port == 22 and tcp.flags.syn == 1
tcp.port == 22 and tcp.flags.reset == 1
tcp.port == 22 and tcp.flags.syn == 1 and tcp.flags.ack == 0
Aby wykryć atak brute force na SSH:
- Szukaj wielu pakietów SYN z różnych portów źródłowych do portu 22
- Po każdym SYN – szybko RST (później odrzucone)
- Duża liczba takich prób w krótkim czasie = atak
SSH brute force generuje charakterystyczny wzór: SYN SYN+ACK RST (lub natychmiast RST po SYN). Szukaj tcp.port == 22 and tcp.flags.reset == 1.
Analiza nieudanych logowań SSH za pomocą Wireshark opiera się na metadanych połączenia, ponieważ samo SSH jest protokołem szyfrowanym. Mimo braku dostępu do treści logowania, można analizować wzorce połączeń TCP na porcie 22, które zdradzają próby ataku brute force.
Atak brute force na SSH generuje charakterystyczny wzór wielu połączeń SYN z różnych portów źródłowych, szybko po których następuje RST. Filtr tcp.port == 22 and tcp.flags.syn == 1 and tcp.flags.ack == 0 pokaże wszystkie próby nawiązania połączenia SSH, a tcp.port == 22 and tcp.flags.reset == 1 wskaże gwałtownie zerwane połączenia. Duża liczba takich prób w krótkim czasie wskazuje na atak.
Analiza problemów TCP – praktyka
Cel: znaleźć przyczynę spowolnienia aplikacji webowej.
Krok 1 – sprawd, czy s retransmisje:
tcp.analysis.retransmission
Krok 2 – jeli s, sprawd które IP powoduje problem:
tcp.analysis.retransmission and ip.src == 10.0.0.1
Krok 3 – sprawd, czy problem dotyczy konkretnego portu:
tcp.analysis.retransmission and tcp.port == 443
Krok 4 – sprawd Expert Info (Analyze → Expert Info) – Wireshark podsumuje problemy.
Krok 5 – sprawd Zero Window (odbiorca przeciony):
tcp.analysis.zero_window
Jeli retransmisje s od serwera – problem po stronie serwera. Jeli od klienta – problem po stronie klienta lub sieci. Sprawd te tcp.analysis.duplicate_ack i tcp.analysis.lost_segment.
Analiza retransmisji TCP to praktyczne studium przypadku diagnostyki problemów z wydajnością aplikacji webowych. Proces diagnostyczny zaczyna się od podstawowego filtra tcp.analysis.retransmission, który pokazuje wszystkie retransmitowane pakiety, a następnie stopniowo zawęża się do konkretnego adresu IP lub portu.
Jeśli retransmisje pochodzą od serwera, problem leży po stronie serwera lub sieci między klientem a serwerem. Jeśli od klienta, problem może być po stronie klienta lub w sieci lokalnej. Warto również sprawdzić tcp.analysis.zero_window, które wskazuje na przeciążenie odbiorcy, oraz tcp.analysis.duplicate_ack i tcp.analysis.lost_segment dla pełnego obrazu problemów TCP.
Top 10 filtrów, które musisz znać
- ip.addr == X – cay ruch z/do IP
- tcp.port == X – cay ruch na porcie
- http, dns, arp, icmp – cay protokó
- http.request.method == GET – konkretna metoda HTTP
- tcp.flags.syn == 1 and tcp.flags.ack == 0 – SYN flood
- tcp.analysis.retransmission – retransmisje TCP
- frame.time_delta > 1 – pakiety z opónieniem > 1s
- http contains "password" – szukanie w treci
- _ws.malformed or _ws.expert – pakiety z bdami
- dns.qry.name contains "google" – zapytańia DNS
Podsumowanie najważniejszych filtrów Wireshark obejmuje dziesięć kluczowych wyrażeń, które każdy analityk sieciowy powinien znać. Należą do nich ip.addr do filtrowania według adresu IP, tcp.port dla portów, nazwy protokołów takich jak http czy dns, oraz tcp.flags.syn do wykrywania połączeń.
Na liście znalazły się również tcp.analysis.retransmission do identyfikacji problemów TCP, frame.time_delta do wykrywania opóźnień, http contains do szukania wzorców w treści HTTP oraz _ws.malformed i _ws.expert do znajdowania pakietów z błędami. Ostatnim z top 10 jest dns.qry.name do filtrowania zapytań DNS według nazwy domeny.
Dobre praktyki filtrowania
- Najpierw zawężaj, potem szukaj: najpierw ip.addr, potem contains
- Używaj nawiasów: (A and B) or C – zawsze jasne
- Zapisuj często używane filtry: Filter Buttons, makra, profile
- Wolne filtry (contains, matches) – ostrożnie: na duych plikach mog trwa minutami
- Sprawdzaj pasek filtra: zielony = ok, czerwony = bd
- Używaj prawo-klik Apply as Filter: szybciej niż ręczne wpisywanie
- Eksportuj tylko widoczne pakiety: File Export Specified Packets Displayed
Dobre praktyki filtrowania w Wiresharku pomagają w efektywnej i wydajnej analizie ruchu sieciowego. Podstawowa zasada to najpierw zawężać zakres za pomocą szybkich filtrów na adresach IP i portach, a dopiero potem stosować wolniejsze operatory contains lub matches.
Kolejne zalecenia to używanie nawiasów dla jasności logicznej, zapisywanie często używanych filtrów jako przycisków lub makr, regularne sprawdzanie koloru paska filtra oraz korzystanie z funkcji prawo-klik Apply as Filter dla szybszego tworzenia wyrażeń. Eksportowanie tylko widocznych pakietów przez File Export Specified Packets pozwala na tworzenie mniejszych plików do dalszej analizy.
Sprawdź swoją wiedzę
- Pytanie: Jaka jest podstawowa składnia filtra wyświetlania Wireshark?
Odpowiedź: pole.operator.wartość (np. ip.src == 192.168.1.1).
- Pytanie: Czym różni się filtr wyświetlania od filtra przechwytywania?
Odpowiedź: Display filter dzia po przechwyćeniu, tylko ukrywa pakiety. Capture filter dzia w jdrze, odrzuca pakiety bezpowrotnie. Display filter ma bogatsz skadni (L7).
- Pytanie: Jaki operator suy do szukania wzorca w treci pakietu?
Odpowiedź: contains (szuka podcigu) i matches (wyraenie regularne).
Pytania kontrolne weryfikują znajomość podstawowej składni display filtrów, różnic między display filter a capture filter oraz operatorów contains i matches. Display filter działa po przechwyćeniu i tylko ukrywa pakiety, podczas gdy capture filter odrzuca je bezpowrotnie już na etapie przechwytywania.
Kolejne zagadnienia obejmują znaczenie kolorów paska filtra zielony oznacza poprawną składnię, żółty filtr potencjalnie wolny, a czerwony błąd składni. Istotna jest również znajomość różnicy między ip.src i ip.dst a ip.addr, gdzie ip.addr sprawdza zarówno źródło, jak i cel transmisji, co jest wygodnym skrótem w wielu sytuacjach.
Sprawdź swoją wiedzę – cig dalszy
- Pytanie: Co oznacza zielony / żółty / czerwony pasek filtra?
Odpowiedź: Zielony – filtr poprawny. Żółty – poprawny, ale może być wolny. Czerwony – błąd składni.
- Pytanie: Jak znaleźć retransmisje TCP w Wireshark?
Odpowiedź: Filtr wyświetlania: tcp.analysis.retransmission. Można też Analyze → Expert Info → Warnings.
- Pytanie: Jaka jest różnica między ip.src, ip.dst a ip.addr?
Odpowiedź: ip.src – tylko źródło, ip.dst – tylko cel, ip.addr – źródło LUB cel.
Druga część pytań kontrolnych dotyczy bardziej zaawansowanych aspektów filtrowania w Wiresharku. Pytanie o retransmisje TCP wymaga znajomości filtra tcp.analysis.retransmission oraz dostępu do Expert Info w zakładce Warnings.
Różnica między ip.src, ip.dst i ip.addr to klasyczne zagadnienie, które często pojawia się na egzaminach i w praktyce. ip.src dotyczy tylko źródła, ip.dst tylko celu, a ip.addr łączy oba te warunki. Znajomość tych różnic jest kluczowa przy tworzeniu precyzyjnych filtrów do analizy ruchu sieciowego.
Wykonaj samodzielnie
- Otwórz Wireshark i przechwyć 100 pakietów podczas przeglądania strony
- Zastosuj filtr:
http.request.method == GET – ile pakietów zosta?
- Znajd wszystkie zapytańia DNS:
dns.flags.response == 0
- Znajd pakiety z opónieniem > 0.5 sekundy:
frame.time_delta > 0.5
- Zapisz filtr HTTP errors jako przycisk:
http.response.code >= 400
- Użyj Expression dialog, aby znaleźć pole "tcp.analysis.retransmission" i zastosuj filtr
- Stwórz regułę kolorowania dla retransmisji TCP (kolor czerwony)
Zadanie praktyczne pozwala na samodzielne przećwiczenie umiejętności tworzenia display filtrów w Wiresharku na rzeczywistym ruchu sieciowym. Należy przechwyćić około 100 pakietów podczas przeglądania strony internetowej, a następnie zastosować różne filtry, aby sprawdzić ich działanie w praktyce.
Kolejne kroki obejmują filtrowanie żądań GET, zapytań DNS, pakietów z opóźnieniem powyżej 0,5 sekundy oraz zapisanie filtra dla błędów HTTP jako przycisku. Ostatnim etapem jest użycie Expression dialog do znalezienia pola tcp.analysis.retransmission i utworzenie reguły kolorowania dla retransmisji TCP. To kompleksowe ćwiczenie łączy w sobie wszystkie omawiane w prezentacji zagadnienia.
Koniec części 3
Dziękujemy za uwagę. W następnej części poznamy zaawansowaną analizę protokołów w Wireshark: HTTP/2, DNS, DHCP, TCP, TLS – szczegółowa inspekcja nagłówków i pól, interpretacja danych oraz wykrywanie anomalii.
Praca wasna:
- Przećwicz pisanie 10 różnych filtrów wyświetlania na kartce
- Pobierz SampleCaptures z wiki Wireshark i zastosuj filtry
- Stwórz profil "Security" z regułami kolorowania dla ataków
Trzecia część cyklu pomiarów logicznych kończy się podsumowaniem zdobytej wiedzy o display filtrach Wireshark. Opanowanie składni pole.operator.wartośćść oraz znajomość operatorów porównania i logicznych stanowi solidną podstawę do samodzielnej analizy ruchu sieciowego.
Kolejna prezentacja będzie poświęcona zaawansowanej analizie protokołów HTTP/2, DNS, DHCP i TCP ze szczegółową inspekcją nagłówków i pól. Zachęca się do samodzielnego ćwiczenia na przykładowych plikach z SampleCaptures oraz tworzenia własnego profilu Security z regułami kolorowania dla typowych ataków sieciowych.