1/60
Wireshark - filtry wyświetlania i zaawansowane filtrowanie

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.

Pasek filtrow Wireshark z przykładowym filtrem i zielonym tlem
2/60
Plan części 3

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
Diagram mapy mysli z planem
3/60
Wprowadzenie do filtrów wyświetlania

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".

Wireshark z pustym display filter paskiem i zielonym tlem
Filtr wyświetlania nie zmienia danych – możesz swobodnie przełączać filtry bez utraty informacji.
4/60
Składnia podstawowa

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.

Diagram: pole → kropka → operator → wartosc, ze strzalkami
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).
5/60
Operatory porównania cz. 1

Operatory: ==, !=, >, <

OperatorZnaczeniePrzykład
==równyip.src == 192.168.1.1
!=róznyip.src != 192.168.1.1
>wiekszyframe.len > 1000
<mniejszyframe.len < 100

Uwaga: operator == dla stringów i adresów wymaga dokładnego dopasowania.

Dla liczb: >, <, >=, <= działają normalnie.

Tabela operatorów z przykładami
W filtrach wyświetlania używamy == a nie = (pojedynczy znak = nie jest operatorem w filtrach wyświetlania!).
6/60
Operatory porównania cz. 2

Operatory: >=, <=, contains, matches

OperatorZnaczeniePrzykład
>=większy lub równyframe.len >= 1500
<=mniejszy lub równytcp.port <= 1024
containszawiera podciaghttp contains "password"
matchesdopasowuje regexhttp.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).

Schemat: contains (część lancucha) vs matches (wzorzec regex)
contains i matches są WOLNIEJSZE niż == – używaj ich tylko gdy naprawdę potrzebujesz szukania wzorca.
7/60
Operatory logiczne

Łączenie warunków

OperatorZnaczenieSkladnia
and (&&)koniunkcjaip.src == 1.1.1.1 and tcp.port == 80
or (||)alternatywaip.src == 1.1.1.1 or ip.dst == 1.1.1.1
not (!)negacjanot tcp.port == 22
xorekskluzywna alternatywaip.src == 1.1.1.1 xor ip.dst == 1.1.1.1

Priorytet: not > and > or. Używaj nawiasów dla jasności!

Diagramy Venna dla and, or, not, xor
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!
8/60
Nawiasy w filtrach

Grupowanie wyrażeń

Nawiasy pozwalają grupować wyrażenia i kontrolować kolejność ewaluacji.

# Ruch HTTP lub HTTPS z hosta 10.0.0.1
ip.src == 10.0.0.1 and (tcp.port == 80 or tcp.port == 443)

# DNS z wykluczeniem konkretnego serwera
(udp.port == 53 or tcp.port == 53) and not ip.addr == 8.8.8.8

# Pakiety z bledami lub retransmisje
_ws.malformed or tcp.analysis.retransmission

Nawiasy to także dobry sposób na zwiększenie czytelności filtra.

Struktura drzewiasta ilustrujaca nawiasy (jak w matematyce)
Jeśli filtr robi się zbyt długi – rozbij go na kilka prostszych lub zapisz jako przycisk filtra.
9/60
Display filter vs Capture filter

Dwa światy filtrów

CechaDisplay filterCapture filter (BPF)
Kiedy dziala?Po przechwyćeniuPodczas przechwytywania (w jadrze)
SkladniaWireshark-specific (pole.operator)BPF (host, port, proto)
Usuwa pakiety?Nie – tylko ukrywaTak – odrzuca bezpowrotnie
Poziomy protokółówWszystkie (łącznie z L7: HTTP, DNS)Tylko L2-L4
ZlozonoscBardzo bogata skladniaOgraniczona

Filtr wyświetlania – elastyczna analiza. Filtr przechwytywania – redukcja danych na wejściu.

Dwa paski Wireshark: capture filter i display filter
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.
10/60
Pola protokołów

Gdzie szukać pól?

Sposoby na znalezienie odpowiedniego pola dla filtra:

  1. Expression button: kliknij przycisk „Expression" w pasku filtrów – otwiera przeglądarkę wszystkich pól protokołów
  2. Prawy-klik w Packet Details: kliknij prawym na pole → „Apply as Filter" → wybierz warunek
  3. Prawy-klik → Prepare as Filter: przygotowuje filtr, ale go nie aplikuje
  4. Wpisz w pasek filtrow: autouzupelnianie podpowiada dostepne pola

Każde pole w Packet Details ma swoją nazwę – widoczną w dolnym pasku po kliknięciu.

Zrzut ekranu Expression dialog z lista protokółów
11/60
Expression button

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.

Zrzut ekranu okna Expression dialog
Znajomość pól przychodzi z praktyką. Na początku korzystaj z Expression i prawego-kliku.
12/60
Filtrowanie po adresach IP

Adresy IP w filtrach

PoleOpisPrzykład
ip.srcŹródlowy adres IPip.src == 192.168.1.100
ip.dstDocelowy adres IPip.dst == 10.0.0.1
ip.addrŹródlowy LUB docelowyip.addr == 192.168.1.1
ipv6.srcŹródlowy IPv6ipv6.src == ::1
ipv6.dstDocelowy IPv6ipv6.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.

Schemat: pakiet IP z zaznaczonymi polami src i dst
13/60
Filtrowanie po portach TCP/UDP

Porty TCP i UDP

PoleOpisPrzykład
tcp.portPort TCP (src lub dst)tcp.port == 80
tcp.srcportŹródlowy port TCPtcp.srcport == 12345
tcp.dstportDocelowy port TCPtcp.dstport == 443
udp.portPort UDP (src lub dst)udp.port == 53
udp.srcportŹródlowy port UDPudp.srcport == 67
udp.dstportDocelowy port UDPudp.dstport == 68

Uwaga: tcp.port to skrót od (tcp.srcport == X or tcp.dstport == X).

Naglowek TCP z zaznaczonymi polami portów
14/60
Filtrowanie po protokołach

Protokoły jako filtry

Wystarczy wpisać nazwę protokołu – Wireshark pokaże wszystkie pakiety zawierające ten protokół.

# Tylko pakiety HTTP
http

# Tylko DNS
dns

# Tylko DHCP (lub BOOTP)
dhcp

# Tylko ARP
arp

# Tylko ICMP
icmp

# Tylko TCP lub tylko UDP
tcp
udp

To najprostszy filtr – wpisz protokól i gotowe.

Lista pakietów przed i po zastosowaniu filtra http
15/60
Filtrowanie HTTP – metoda i kod odpowiedzi

Filtry HTTP – podstawy

# Tylko zadania GET
http.request.method == GET

# Tylko zadania POST
http.request.method == POST

# Kod odpowiedzi 200 (OK)
http.response.code == 200

# Bledy 4xx i 5xx
http.response.code >= 400

# Konkretny kod bledu
http.response.code == 404

Wireshark rozróżnia http.request i http.response – to dwa różne zestawy pól.

Pakiet HTTP z zaznaczonymi polami Request Method i Response Code
Pamiętaj: http (sam protokół) znajdzie WSZYSTKIE pakiety HTTP. http.response.code znajdzie tylko odpowiedzi. Jeśli chcesz tylko żądania – użyj http.request.
16/60
Filtrowanie HTTP – host i URI

Host i ścieżka w HTTP

# Zadania do konkretnego hosta
http.host == example.com

# Zadania zawierajace w sciezce "login"
http.request.uri contains "login"

# Zadania do konkretnej sciezki
http.request.uri == "/index.html"

# User-Agent zawierajacy "Mozilla"
http.user_agent contains "Mozilla"

# Content-Type
http.content_type == "application/json"

contains działa case-sensitive – szuka dokładnie takiego podciągu.

Naglowek HTTP z zaznaczonymi polami host, URI, User-Agent
17/60
Filtrowanie DNS

Filtry DNS

# Zapytania o konkretną domenę
dns.qry.name == www.example.com

# Odpowiedzi (flaga response = 1)
dns.flags.response == 1

# Zapytania (flaga response = 0)
dns.flags.response == 0

# Odpowiedzi z konkretnym adresem A
dns.a == 93.184.216.34

# Zapytania typu A (IPv4)
dns.qry.type == 1

# Szukaj domeny zawierajacej "google"
dns.qry.name contains "google"

dns.qry.name – tylko zapytańia. dns.resp.name – tylko odpowiedzi.

Pakiet DNS z rozwinietym drzewem pol
18/60
Filtrowanie DHCP

Filtry DHCP

# Konkretna nazwa hosta w DHCP
dhcp.option.hostname == "laptop-student"

# Zadanie konkretnego adresu IP
dhcp.option.requested_ip == 192.168.1.100

# Serwer DHCP
dhcp.option.dhcp_server == 192.168.1.1

# Typ komunikatu DHCP
# 1 = DHCP Discover, 2 = Offer, 3 = Request, 4 = Decline, 5 = ACK, 6 = NAK
dhcp.option.dhcp == 3

# Adres MAC klienta w DHCP
dhcp.option.client_mac == 00:11:22:33:44:55

DHCP używa protokołu BOOTP – filtr dhcp lub bootp działa.

Czterokrokowa wymiana DHCP (Discover, Offer, Request, ACK)
19/60
Filtrowanie ICMP

Filtry ICMP (ping)

# Tylko echo request (ping)
icmp.type == 8

# Tylko echo reply (pong)
icmp.type == 0

# Destination Unreachable
icmp.type == 3

# Time Exceeded (TTL exceeded)
icmp.type == 11

# Konkretny numer sekwencyjny ICMP
icmp.seq == 1

# ICMPv6 (dla IPv6)
icmpv6.type == 128  # echo request IPv6

Typy ICMP: 0=Echo Reply, 3=Dest Unreach, 5=Redirect, 8=Echo Request, 11=TTL Exceeded.

Naglowek ICMP z zaznaczonymi polami Type, Code, Sequence
Do śledzenia traceroute – filtr icmp.type == 11 (Time Exceeded) lub icmp.type == 3 (Port Unreachable).
20/60
Filtrowanie TCP flags – SYN, ACK, RST

Flagi TCP w filtrach

# Flaga SYN (ustawiona)
tcp.flags.syn == 1

# Flaga ACK (ustawiona)
tcp.flags.ack == 1

# SYN bez ACK (pierwszy SYN w handshake)
tcp.flags.syn == 1 and tcp.flags.ack == 0

# SYN+ACK
tcp.flags.syn == 1 and tcp.flags.ack == 1

# RST (reset polaczenia)
tcp.flags.reset == 1

# FIN (zakonczenie polaczenia)
tcp.flags.fin == 1

# PUSH (dane wyslane natychmiast)
tcp.flags.push == 1
Naglowek TCP z zaznaczonym polem Flags (9 bitów)
tcp.flags.syn == 1 to standardowa skladnia. Mozna tez: tcp.flags & 0x02 (bitmask – dla zaawansowanych).
21/60
SYN flood – wykrywanie

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:

# Pakiety SYN (bez ACK) z jednego IP do wielu portów
tcp.flags.syn == 1 and tcp.flags.ack == 0

# Mozna tez uzyc maski bitowej
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.

Lista pakietów SYN z wielu portów z jednego zródla
22/60
Filtrowanie TCP analysis

TCP analysis – zaawansowana diagnostyka

Wireshark automatycznie analizuje strumienie TCP i dodaje pola analysis.

# Retransmisje
tcp.analysis.retransmission

# Duplicate ACK (szybka retransmisja)
tcp.analysis.duplicate_ack

# Zero Window (odbiorca przeciagny)
tcp.analysis.zero_window

# Lost segment (brakujacy segment)
tcp.analysis.lost_segment

# ACK zagubiony
tcp.analysis.ack_lost_segment

# Window Update
tcp.analysis.window_update

# Fast Retransmission
tcp.analysis.fast_retransmission
Wireshark z filtrem tcp.analysis.retransmission – podswietlone pakiety
Jeśli widzisz dużo tcp.analysis.retransmission (>2% ruchu) – masz problem z siecią (przeciążenie, błędy, zły link).
23/60
TCP analysis – praktyczne użycie

Analiza problemów TCP

# Wszystkie problemy TCP jednoczenie
tcp.analysis.flags

# Retransmisje lub duplikaty ACK
tcp.analysis.retransmission or tcp.analysis.duplicate_ack

# Sprawdz, które IP powoduje retransmisje
tcp.analysis.retransmission and ip.src == 192.168.1.100

# Znajdz pakiety z Zero Window
tcp.analysis.zero_window

# Pakiety, które wywolaly retransmisje
tcp.analysis.retransmission and tcp.nxtseq

tcp.analysis.flags to zbiór wszystkich flag TCP analysis – szybki sposób na znalezienie problemów.

Wykres czasu z zaznaczonymi retransmisjami (IO Graph)
24/60
Filtrowanie ARP

Filtry ARP

# Tylko ARP (wszystkie typy)
arp

# ARP Request (opcode = 1)
arp.opcode == 1

# ARP Reply (opcode = 2)
arp.opcode == 2

# Konkretny adres MAC źródła w ARP
arp.src.hw_mac == 00:11:22:33:44:55

# Konkretny adres IP źródła w ARP
arp.src.proto_ipv4 == 192.168.1.1

# Wykrywanie ARP spoofing – duplikacja IP
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)!

Pakiet ARP z zaznaczonymi polami opcode, MAC zródla, IP zródla
arp.duplicate-address-detected to wbudowany test Wireshark – podświetla, gdy dwa różne MAC odpowiadają na ARP dla tego samego IP (spoofing!).
25/60
Filtrowanie po adresie MAC

Adresy MAC w filtrach

# Źródlowy adres MAC
eth.src == 00:11:22:33:44:55

# Docelowy adres MAC
eth.dst == 00:11:22:33:44:55

# Źródlowy lub docelowy MAC
eth.addr == 00:11:22:33:44:55

# Ramki broadcast (MAC FF:FF:FF:FF:FF:FF)
eth.dst == ff:ff:ff:ff:ff:ff

# Ramki multicast (pierwszy bit MAC = 1)
eth.dst[0] & 0x01

# Konkretny producent (OUI – pierwsze 3 bajty MAC)
eth.src[0:3] == 00:1a:2b

eth.addr – sprawdza zarówno źródło, jak i cel.

Ramka Ethernet z zaznaczonymi adresami MAC
26/60
Filtrowanie po EtherType

EtherType – typ protokołu w warstwie 2

# IPv4
eth.type == 0x0800

# ARP
eth.type == 0x0806

# IPv6
eth.type == 0x86DD

# VLAN (802.1Q)
eth.type == 0x8100

# PPPoE
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.

Naglowek Ethernet II z zaznaczonym polem EtherType (2 bajty)
27/60
Filtrowanie po długości ramki

Filtry według rozmiaru

# Długość ramki (calkowita, z naglowkami)
frame.len > 1500

# Male pakiety (SYN flood – typowo 40-60 B)
frame.len < 60

# Pakiety o dlugości miedzy 200 a 500 B
frame.len >= 200 and frame.len <= 500

# Przechwycona długość (może byc mniejsza, jeśli snaplen)
frame.cap_len < frame.len

# Pakiety z niewidoczna trescia (snaplen za maly)
frame.cap_len < frame.len

Przydatne do wykrywania:

  • Malych pakietów (SYN flood, skanowanie)
  • Duych pakietów (transfery plików, MTU discovery)
Histogram rozmiarów pakietów z zaznaczonymi zakresami
frame.cap_len != frame.len oznacza, że snaplen był mniejszy niż pakiet – część danych została obcięta.
28/60
Filtrowanie po numerze pakietu i czasie

Filtry czasowe i numeryczne

# Konkretny numer pakietu
frame.number == 42

# Zakres pakietów
frame.number >= 100 and frame.number <= 200

# Czas od poczatku przechwyćenia (> 10 sekund)
frame.time_relative > 10

# Czas miedzy pakietami (> 1 sekunda przerwy)
frame.time_delta > 1

# Czas bezwgledny (ISO format)
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.

Lista pakietów z kolumnami Delta Time i Time Relative
29/60
Filtrowanie po markach i komentarzach

Pakiety oznaczone przez użytkownika

# Tylko oznaczone (marked) pakiety
frame.marked

# Tylko pakiety z komentarzami
frame.comment

# Pakiety z komentarzem zawierajacym "sprawdz"
frame.comment contains "sprawdz"

# Pakiety zignorowane (ignore)
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.

Lista pakietów – jeden oznaczony (czarny), jeden z komentarzem (ikona)
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!
30/60
Filtrowanie z contains

Szukanie wzorca w treści

contains – sprawdza czy pole (lub surowe dane) zawiera podany string (case-sensitive).

# Szukaj "password" w tresci HTTP
http contains "password"

# Szukaj w surowych danych
data contains "union"

# Szukaj w URI zadania
http.request.uri contains "admin"

# Szukaj w tresci odpowiedzi
http.file_data contains "# Szukaj w calym pakiecie (wszystkie warstwy)
frame contains "secret"

contains dziala na dowolnym polu, które ma reprezentacje tekstowa.

Hex dump pakietu z zaznaczonym stringiem password
contains rozróżnia wielkość liter! "Password" != "password". Użyj matches z flagą (?i) dla case-insensitive.
31/60
Filtrowanie z matches – regex

Wyrażenia regularne w filtrach

matches – dopasowuje wzorzec regex (PCRE – Perl Compatible Regular Expressions).

# URI z parametrem id (cyfry)
http.request.uri matches "\.php\?id=\d+"

# Szukaj emaili w tresci
http contains "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"

# Case-insensitive: (?i) na poczatku wzorca
http matches "(?i)password"

# Adresy IP w tresci (wzorzec)
frame matches "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"

matches jest najbardziej elastyczny, ale tez najwolniejszy.

Schemat: wzorzec regex naozony na strumien danych
matches jest WYRAŹNIE wolniejszy niż contains. Używaj tylko gdy contains nie wystarczy. Regex kompiluje się dla każdego pakietu!
32/60
Funkcje w filtrach

Funkcje w filtrach wyświetlania

Filtry wyświetlania obsługują funkcje na polach:

FunkcjaOpisPrzykład
upper()zamien na wielkie literyupper(http.request.method) == "GET"
lower()zamien na male literylower(http.host) == "example.com"
count()zlicza wystapienia pola w ramcecount(ip.addr) > 2
len()długość lancuchalen(http.request.uri) > 100
min()mniejsza z dwoch wartoscimin(tcp.srcport, tcp.dstport) <= 1024
max()większa z dwoch wartoscimax(tcp.srcport, tcp.dstport) > 1024
abs()wartosc bezwzglednaabs(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.

Tabela z funkcjami i przykładami
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.
33/60
Filtrowanie warstw

Filtrowanie całych warstw

Możesz filtrować po zawartości całej warstwy protokołu:

# Szukaj w warstwie IP (naglowek + payload)
ip contains "192"

# Szukaj "HTTP" w calej ramce
frame contains "HTTP"

# Szukaj w warstwie TCP
tcp contains "GET"

# Szukaj w danych aplikacji (payload)
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.

Schemat warstw: ramka → IP → TCP → HTTP – zaznaczone, gdzie szuka contains
34/60
Filtrowanie VLAN

Filtry dla sieci VLAN (802.1Q)

# Konkretny VLAN ID
vlan.id == 100

# Priorytet VLAN (CoS)
vlan.priority == 5

# VLAN ID z zakresu
vlan.id >= 10 and vlan.id <= 20

# Ruch z VLAN (dowolny)
vlan

# Ruch BEZ VLAN
not vlan

VLAN ID: 0–4095 (standard 802.1Q).

Priorytet: 0–7 (dla QoS).

Przydatne w sieciach korporacyjnych z wieloma VLAN-ami.

Ramka Ethernet z tagiem 802.1Q (4 bajty wstawione miedzy MAC a EtherType)
Jeśli przechwytujesz na interfejsie z VLAN trunk – wszystkie pakiety mają tag VLAN. Użyj vlan.id, aby wyodrębnić konkretny VLAN.
35/60
Filtrowanie IPv6

Filtry dla IPv6

# Źródlowy IPv6
ipv6.src == fe80::1

# Docelowy IPv6
ipv6.dst == 2001:db8::1

# Źródlowy lub docelowy IPv6
ipv6.addr == ::1

# Hop Limit (odpowiednik TTL w IPv4)
ipv6.hlim == 1

# Next Header (protokól nastepny)
ipv6.nxt == 6   # TCP

# IPv6 z adresem zawierajacym wzorzec
ipv6.addr contains "ff02"

IPv6 ma własne pola: ipv6.src, ipv6.dst, ipv6.addr.

Naglowek IPv6 z zaznaczonymi polami
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.
36/60
Filtrowanie TLS/SSL

Filtry dla ruchu szyfrowanego

# Ruch TLS (cay)
tls

# TLS Handshake (np. Client Hello, Server Hello)
tls.handshake.type == 1   # Client Hello
tls.handshake.type == 2   # Server Hello

# SNI (Server Name Indication) – nazwa serwera w TLS
tls.handshake.extensions_server_name contains "example"

# Wersja TLS w rekordzie
tls.record.version == 0x0303   # TLS 1.2
tls.record.version == 0x0304   # TLS 1.3

# Content Type – 23 = Application Data
tls.record.content_type == 23

# Certyfikat z konkretna nazwa
tls.handshake.certificate contains "example.com"

Uwaga: Wireshark może odczytać tylko metadane TLS (SNI, wersje, certyfikaty) – treść jest zaszyfrowana.

Pakiet TLS Client Hello z zaznaczonym SNI
Do odszyfrowania TLS potrzebujesz kluczy sesji (SSLKEYLOGFILE) lub klucza prywatnego serwera. SNI jest zawsze widoczne – nawet w TLS 1.3.
37/60
Filtrowanie po polach bitowych (bitmask)

Maska bitowa – precyzyjne filtrowanie flag

Mozna uzyc operatora & (bitwise AND) do filtrowania pojedynczych bitów:

# Flaga SYN w TCP (bit 1 w bajcie flag)
tcp.flags & 0x02

# Flaga SYN + ACK (bity 1 i 4)
tcp.flags & 0x12 == 0x12

# Flaga RST (bit 2)
tcp.flags & 0x04

# Sprawdz pierwszy bit adresu MAC (multicast)
eth.dst[0] & 0x01

# IP Flags – Don't Fragment (bit 1)
ip.flags & 0x02

Skladnia: pole & maska == wartosc lub po prostu pole & maska (sprawdza czy != 0).

Naglowek TCP – bitowa struktura flag (CWR, ECE, URG, ACK, PSH, RST, SYN, FIN)
Bitmaski są wydajniejsze niż tcp.flags.syn == 1, ale mniej czytelne. Używaj dla zaawansowanych scenariuszy.
38/60
Łańcuchy filtrów

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:

# Bledy 5xx z serwera, bez 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:

# Retransmisje HTTP
tcp.analysis.retransmission and (tcp.port == 80 or tcp.port == 8080)

Zawsze grupuj warunki nawiasami – poprawia czytelność i zapobiega błędom.

Schemat blokowy przepywu logicznego filtra (jak w programowaniu)
39/60
Zapisywanie filtrów – Filter Buttons

Zakładki z filtrami

Wireshark pozwala zapisywac filtry jako przyciski (zakadki) w pasku filtrow.

Jak dodać:

  1. Wpisz filtr w pasek filtrow
  2. Kliknij przycisk "+" (Add Display Filter Button) po lewej stronie paska
  3. Wpisz nazwe (np. "HTTP errors") i opcjonalnie skrót klawiszowy (Alt+1...)
  4. Kliknij OK

Zapisane filtry sa widoczne jako przyciski nad paskiem filtrow.

Zarządzanie: Analyze → Display Filter Buttons – edycja, usuwanie, kolejnosc.

Pasek filtrow z zakadkami (przyciskami): HTTP, DNS, Errors, Retransmissions
Używaj Alt+1... Alt+0 jako skrótów do najczęściej używanych filtrów. Oszczędza mnóstwo czasu!
40/60
Zarządzanie filtrami – makra

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.

Okno Display Filter Macros z lista makr
Makra są zapisywane w profilu – możesz mieć różne zestawy makr dla różnych scenariuszy (analiza HTTP, WLAN, bezpieczeństwo).
41/60
Predefiniowane filtry Wireshark

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.

Okno Display Filters z lista predefiniowanych filtrow
42/60
Autouzupełnianie i walidacja filtra

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.).

Trzy paski filtrow: zielony, zoty, czerwony
43/60
Sprawdzanie poprawności filtra

Najczęstsze błędy składni

Bledny filtrBladPoprawiony
ip.src = 192.168.1.1Uzyto = zamiast ==ip.src == 192.168.1.1
ip.src == 192.168.1Niepeny adres IPip.src == 192.168.1.1
http res.code == 200Brak kropki (pole w dwóch sowach)http.response.code == 200
tcp.port == "80"Cudzysów dla liczbytcp.port == 80
tcp.port == 80, udp.port == 53Przecinek zamiast ortcp.port == 80 or udp.port == 53

Wiekszosc bledów wynika z mylenia skladni display filter z innymi jezykami.

Tabela bledów z zaznaczonym czerwonym paskiem
Jeśli filtr jest czerwony – kliknij w pasek i sprawdź podpowiedź. Wireshark zazwyczaj sugeruje poprawkę.
44/60
Filtrowanie z in – zbiór wartości

Sprawdzanie przynależności do zbioru

Operator in pozwala sprawdzic, czy pole należy do zbioru wartosci:

# Adresy IP z podsieci (CIDR)
ip.src in {10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16}

# Porty z listy
tcp.port in {80, 443, 8080}

# Adresy MAC z listy
eth.addr in {00:11:22:33:44:55, 00:aa:bb:cc:dd:ee}

# Zakresy IP – czy źródło naley do podsieci
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.

Schemat: zbior wartości i pole sprawdzane, czy należy
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}.
45/60
Filtrowanie WLAN

Filtry dla sieci bezprzewodowych (802.11)

# Typ ramki: 0 = Management, 1 = Control, 2 = Data
wlan.fc.type == 0

# Beacon frames (management, subtype 8)
wlan.fc.type_subtype == 0x08

# Probe Request / Probe Response
wlan.fc.type_subtype == 0x04   # Probe Request
wlan.fc.type_subtype == 0x05   # Probe Response

# Adres źródłowy (MAC) w WLAN
wlan.sa == 00:11:22:33:44:55

# Adres docelowy
wlan.da == ff:ff:ff:ff:ff:ff

# BSSID (identyfikator punktu dostepowego)
wlan.bssid == 00:11:22:33:44:55

# Konkretny kanal
wlan_radio.channel == 6

Do analizy WLAN potrzebujesz trybu monitor na karcie.

Ramka 802.11 z zaznaczonymi polami Frame Control, SA, DA, BSSID
Beacon frames (typ 0x08) – wysylane przez AP co 100 ms. Filtr wlan.fc.type_subtype == 0x08 pokaze wszystkie sieci Wi-Fi w okolicy.
46/60
Filtrowanie pakietów z błędami

Błędy i ostrzeżenia Wireshark

Wireshark oznacza pakiety z problemami specjalnymi polami:

# Pakiety z bledami (malformed)
_ws.malformed

# Pakiety przyciete (krótsze niz deklarowana dugosc)
_ws.short

# Expert Info – wszystkie problemy
_ws.expert

# Konkretny severity w Expert Info
_ws.expert.severity == 1   # Warning
_ws.expert.severity == 2   # Error

# Expert Info – grupa
_ws.expert.group == 2      # Protocol

# Komunikat Expert Info
_ws.expert.message contains "retransmission"

_ws – przedrostek dla pól dodawanych przez Wireshark (nie pochodza z protokołu).

Lista pakietów z czarnymi (bledy) i zotymi (ostrzezenia) pakietami
_ws.malformed i _ws.expert to pierwsze filtry, które stosujesz, gdy szukasz problemów w sieci.
47/60
Expert Info – szczegółowo

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:

# Tylko bledy
_ws.expert.severity == 2

# Tylko komunikaty o retransmisji
_ws.expert.message contains "Retransmission"
Okno Expert Info z lista komunikatów
Expert Info to centrum dowodzenia diagnostyka – zamiast ręcznie szukaæ problemów, otwórz to okno i zobacz wszystkie problemy na licie.
48/60
Filtrowanie przepływów TCP/UDP

Filtrowanie po strumieniach

Wireshark numeruje strumienie TCP/UDP – możesz filtrować po numerze strumienia:

# Konkretny strumien TCP (numer widoczny w Follow TCP Stream)
tcp.stream == 0

# Zakres strumieni TCP
tcp.stream >= 5 and tcp.stream <= 10

# Strumienie UDP
udp.stream == 3

# Strumienie TCP z wybranym adresem
            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.

Okno Follow TCP Stream z numerem strumienia w tytule
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.
49/60
Filtr wyświetlania + koloryzacja

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 reguyDisplay filterKolor
SQL Injectionhttp.request.uri contains "union" or http.request.uri contains "select"Czerwony
Wysokie opóznienieframe.time_delta > 1Pomaraczowy
Retransmisjetcp.analysis.retransmissionFioletowy
DNS queriesdns.flags.response == 0Jasnoniebieski

Reguy sprawdzane sa od góry – pierwsze dopasowanie wygrywa.

Lista pakietów z kolorowaniem wedug wasnch reguy
Łą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.
50/60
Wydajność filtrów

Które filtry są wolne?

Nie wszystkie filtry dzialaja równie szybko. Oto ranking wydajności:

SzybkoOperator/przykadUwagi
★★★ Bardzo szybki==, !=, >, <, ip.addr, tcp.portPorównanie indeksowanych pól
★★☆ redniin {}, protokoy (http, dns)Sprawdza wiele wartoci
★☆☆ Wolnycontains, data containsSzukanie podcigu w danych
☆☆☆ Bardzo wolnymatches (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
Wykres supkowy czasu wykonania dla róznych typów filtrow
contains na polu frame (cała ramka) jest szczególnie wolny – ogranicz najpierw protokołem: http contains "pass" jest szybsze niż frame contains "pass".
51/60
Pułapki: == vs contains, case sensitivity

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).

Porównanie: == (dokadne), contains (cz stingu)
Gdy filtr nie znajduje spodziewanych pakietów – sprawdź wielkość liter! "GET" != "get". Użyj upper() lub (?i).
52/60
Studium przypadku 1: SQL injection

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:

# Typowe wzorce SQL Injection w URI
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.

Wireshark z fitrem SQL Injection – podwietlone podejrzane pakiety
To tylko podstawowy filtr – prawdziwe ataki SQL Injection mogą używać enkodowania (URL, base64). Użyj matches dla bardziej zaawansowanych wzorców.
53/60
Studium przypadku 2: Nieudane logowania SSH

Filtr do analizy SSH

SSH jest szyfrowane – nie zobaczysz treści, ale możesz analizować metadane.

Display filtr dla ruchu SSH:

# Ruch SSH (port 22)
tcp.port == 22

# SSH – tylko pakiety z flag SYN (nowe poczenia)
tcp.port == 22 and tcp.flags.syn == 1

# SSH – zerwane pozenia (RST)
tcp.port == 22 and tcp.flags.reset == 1

# SSH – wiele SYN z jednego IP (brute force)
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
Lista pakietów SSH z wieloma SYN i RST z jednego IP
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.
54/60
Studium przypadku 3: Retransmisje TCP

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:

# Retransmisje z podziaem na adresy
tcp.analysis.retransmission and ip.src == 10.0.0.1

Krok 3 – sprawd, czy problem dotyczy konkretnego portu:

# Retransmisje na porcie 443 (HTTPS)
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
Wireshark z fitrami retransmisji i zaznaczonymi pakietami problemów
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.
55/60
Podsumowanie 1 – najważniejsze filtry

Top 10 filtrów, które musisz znać

  1. ip.addr == X – cay ruch z/do IP
  2. tcp.port == X – cay ruch na porcie
  3. http, dns, arp, icmp – cay protokó
  4. http.request.method == GET – konkretna metoda HTTP
  5. tcp.flags.syn == 1 and tcp.flags.ack == 0 – SYN flood
  6. tcp.analysis.retransmission – retransmisje TCP
  7. frame.time_delta > 1 – pakiety z opónieniem > 1s
  8. http contains "password" – szukanie w treci
  9. _ws.malformed or _ws.expert – pakiety z bdami
  10. dns.qry.name contains "google" – zapytańia DNS
Lista ikon dla kadego z 10 filtrów
56/60
Podsumowanie 2 – dobre praktyki

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
Checklista z ikonami dobrych praktyk
57/60
Pytania kontrolne 1

Sprawdź swoją wiedzę

  1. Pytanie: Jaka jest podstawowa składnia filtra wyświetlania Wireshark?

Odpowiedź: pole.operator.wartość (np. ip.src == 192.168.1.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).

  1. Pytanie: Jaki operator suy do szukania wzorca w treci pakietu?

Odpowiedź: contains (szuka podcigu) i matches (wyraenie regularne).

Ikona znaku zapytańia
58/60
Pytania kontrolne 2

Sprawdź swoją wiedzę – cig dalszy

  1. Pytanie: Co oznacza zielony / żółty / czerwony pasek filtra?

Odpowiedź: Zielony – filtr poprawny. Żółty – poprawny, ale może być wolny. Czerwony – błąd składni.

  1. Pytanie: Jak znaleźć retransmisje TCP w Wireshark?

Odpowiedź: Filtr wyświetlania: tcp.analysis.retransmission. Można też Analyze → Expert Info → Warnings.

  1. 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.

Ikona znaku zapytańia
59/60
Zadanie praktyczne

Wykonaj samodzielnie

  1. Otwórz Wireshark i przechwyć 100 pakietów podczas przeglądania strony
  2. Zastosuj filtr: http.request.method == GET – ile pakietów zosta?
  3. Znajd wszystkie zapytańia DNS: dns.flags.response == 0
  4. Znajd pakiety z opónieniem > 0.5 sekundy: frame.time_delta > 0.5
  5. Zapisz filtr HTTP errors jako przycisk: http.response.code >= 400
  6. Użyj Expression dialog, aby znaleźć pole "tcp.analysis.retransmission" i zastosuj filtr
  7. Stwórz regułę kolorowania dla retransmisji TCP (kolor czerwony)
Ikony zada do wykonania
60/60
Zakończenie części 3

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
Zapowied czci 04 – ikona lupy na protokółe