Wireshark i tcpdump — analiza ruchu sieciowego krok po kroku
Opublikowano: 9 kwietnia 2026 · Kategoria: VPS / Networking
Gdy aplikacja nie odpowiada, logi są puste, a curl zwraca "connection reset by peer" — trzeba zobaczyć co naprawdę idzie przez sieć. tcpdump i Wireshark to od 20 lat standardowy duet: tcpdump do łapania pakietów na serwerze, Wireshark do ich analizy na laptopie. Oto przewodnik, który pozwoli Ci rozgryźć każdy problem sieciowy.
Instalacja tcpdump na VPS
Na większości dystrybucji tcpdump jest dostępny w repozytoriach — instalacja to jedna komenda. Potrzebujesz uprawnień root lub sudo:
# Debian/Ubuntu sudo apt update sudo apt install tcpdump # RHEL/CentOS/Rocky sudo dnf install tcpdump # Sprawdź wersję tcpdump --version # Lista interfejsów sieciowych (eth0, ens3, lo, docker0) sudo tcpdump -D
Na Wiresharka dla Windows/macOS/Linux idź na wireshark.org/download.html.
Instalator zawiera też tshark (CLI wersja Wiresharka) oraz dumpcap.
Podstawowe komendy tcpdump
# Cały ruch na eth0 (Ctrl+C żeby przerwać) sudo tcpdump -i eth0 # Bez DNS lookupów (szybciej, czytelniej) sudo tcpdump -i eth0 -n # Z rozmiarem pakietów i timestampem w ms sudo tcpdump -i eth0 -nn -tttt # Tylko pierwsze 100 pakietów sudo tcpdump -i eth0 -c 100 # Zapis do pliku pcap (do analizy w Wireshark) sudo tcpdump -i eth0 -w capture.pcap # Rotacja plików (co 100MB, max 5 plików) sudo tcpdump -i eth0 -w capture.pcap -C 100 -W 5 # Odczyt zapisanego pliku tcpdump -r capture.pcap -n
Filtry BPF — Berkeley Packet Filter
BPF to mini-język do filtrowania pakietów w kernelu — pakiety, które nie pasują do filtra, nie lądują nawet w user space. Dzięki temu tcpdump jest wydajny nawet na 1 Gbps. Filtry podajesz jako ostatni argument:
# Po adresie IP sudo tcpdump -i eth0 -n host 10.0.0.5 sudo tcpdump -i eth0 -n src host 10.0.0.5 sudo tcpdump -i eth0 -n dst host 10.0.0.5 # Po porcie sudo tcpdump -i eth0 -n port 443 sudo tcpdump -i eth0 -n tcp port 80 sudo tcpdump -i eth0 -n udp port 53 # Kombinacje (and, or, not) sudo tcpdump -i eth0 -n 'host 10.0.0.5 and port 443' sudo tcpdump -i eth0 -n 'src 10.0.0.5 or src 10.0.0.6' sudo tcpdump -i eth0 -n 'not arp and not icmp' # Sieć CIDR sudo tcpdump -i eth0 -n net 192.168.1.0/24 # Tylko nowe połączenia TCP (flagi SYN bez ACK) sudo tcpdump -i eth0 -n 'tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] & tcp-ack == 0' # Tylko reset (RST) — debugowanie "connection reset" sudo tcpdump -i eth0 -n 'tcp[tcpflags] & tcp-rst != 0'
Porównanie najczęstszych filtrów
| Co chcesz złapać | tcpdump (BPF) | Wireshark (display filter) |
|---|---|---|
| Ruch HTTP | tcp port 80 | http |
| Ruch HTTPS | tcp port 443 | tls |
| Tylko DNS queries | udp port 53 | dns |
| Konkretny host | host 1.2.3.4 | ip.addr == 1.2.3.4 |
| SYN packets (nowe TCP) | tcp[13] = 2 | tcp.flags.syn == 1 and tcp.flags.ack == 0 |
| Tylko retransmisje | (trudne w BPF) | tcp.analysis.retransmission |
Capture na serwerze, analiza na laptopie
Standardowy workflow na produkcji: Wireshark GUI na laptopie jest lżejszy od instalacji X11 na VPS. Łapiesz tcpdumpem, kopiujesz plik, otwierasz lokalnie:
# Na VPS — łap 1000 pakietów HTTPS do /var/tmp/capture.pcap ssh [email protected] sudo tcpdump -i eth0 -n -c 1000 -w /var/tmp/capture.pcap 'tcp port 443' # Nadaj uprawnienia (tcpdump zapisał jako root) sudo chown user:user /var/tmp/capture.pcap # Na laptopie — pobierz plik scp [email protected]:/var/tmp/capture.pcap ~/Downloads/ # Otwórz w Wireshark wireshark ~/Downloads/capture.pcap # LUB streaming bezpośrednio (bez pliku pośredniego) ssh [email protected] "sudo tcpdump -i eth0 -n -w - 'tcp port 443'" \ | wireshark -k -i -
Wireshark GUI — podstawy nawigacji
Po otwarciu pliku pcap Wireshark pokazuje trzy panele: lista pakietów (góra, każdy wiersz = 1 pakiet), drzewo protokołów (środek, warstwy OSI rozwinięte) i hex dump (dół, surowe bajty). Najważniejsze skróty i funkcje:
- Display filter bar (Ctrl+/) — pole na górze do filtrowania już przechwyconych
pakietów. Przykłady:
http.request.method == "POST",tcp.port == 443,ip.src == 10.0.0.5. - Follow TCP Stream (PPM na pakiecie > Follow > TCP Stream) — pokazuje całą sesję TCP w jednym oknie, oddzielając żądanie od odpowiedzi kolorami. Must-have do debugowania HTTP.
- Statistics > Conversations — lista wszystkich par IP:port z liczbą pakietów i bajtów. Szybko pokazuje kto gada z kim najwięcej.
- Statistics > IO Graph — wykres pakietów w czasie. Widać latency spikes, microbursts, retransmisje.
- Expert Info (Analyze > Expert Information) — automatyczny raport o błędach, ostrzeżeniach, retransmisjach, out-of-order.
Troubleshooting case study — HTTPS timeout
Klient zgłasza, że aplikacja "losowo" nie odpowiada. Sprawdzasz nginx logi — pusto. Odpalasz tcpdump i znajdujesz przyczynę w 5 minut:
# 1. Łap 30 sekund ruchu HTTPS od IP klienta sudo tcpdump -i eth0 -n -w problem.pcap \ 'host 203.0.113.45 and tcp port 443' & TCPDUMP_PID=$! sleep 30 sudo kill $TCPDUMP_PID # 2. Szybka analiza w CLI tcpdump -r problem.pcap -n 'tcp[tcpflags] & tcp-rst != 0' # Widać RST od serwera - coś zamyka połączenie # 3. Otwórz w Wireshark i Follow TCP Stream # Filtr: tcp.analysis.retransmission # Jeśli widzisz retransmisje - problem z MTU lub firewall drop # Jeśli widzisz RST po SYN - iptables/conntrack full # Jeśli widzisz RST po HTTP request - timeout aplikacji
Best practices
- Zawsze filtruj w tcpdump — nie łap całego ruchu na busy serwerze. Filtruj po host, port, protocol. Capture all pójdzie w GB w kilka sekund.
- Używaj
-w+ analiza offline — pisanie do pliku jest szybsze niż wyświetlanie na ekranie (brak dekodowania). - Rotacja plików
-Ci-G— na długich capture używaj rotacji rozmiaru lub czasu, żeby nie zapełnić dysku. - Uważaj na prywatność — pcap zawiera hasła, tokeny, cookies. Trzymaj pliki w
/var/tmpz prawami 600, kasuj po analizie, NIE commituj do git. - Dokumentuj problem — zawsze zapisz filtr, timestamp i co zaobserwowałeś. Za miesiąc nie będziesz pamiętać kontekstu.
Uwaga: Przechwytywanie ruchu innych użytkowników bez zgody może być nielegalne (RODO, ustawa o inwigilacji). Używaj tcpdump tylko na własnych serwerach i wyłącznie do debugowania.