tcpdump

Przechwytuje i analizuje pakiety sieciowe na interfejsie z filtrami BPF.

tcpdump to klasyczny sniffer pakietów działający w terminalu. Podsłuchuje ruch na wybranym interfejsie sieciowym, rozkłada nagłówki na czynniki pierwsze i wypisuje je na ekran albo zapisuje do pliku. Używasz go, gdy chcesz zobaczyć, co realnie leci po kablu, a nie co wydaje ci się, że leci: sprawdzić czy pakiety w ogóle dochodzą, zdiagnozować niedziałające połączenie, złapać podejrzany ruch albo zrzucić sesję do pliku i obejrzeć ją później w Wiresharku. Filtry BPF pozwalają wyłuskać dokładnie to, co cię interesuje, zamiast tonąć w tysiącach linijek.

Składnia i najważniejsze opcje

Podstawowa forma to tcpdump [-i iface] [-n] [-c liczba] [-w plik] [wyrażenie]. Wyrażenie na końcu to filtr BPF, np. port 443 albo host 10.0.0.1.

  • -i — wybiera interfejs do nasłuchu (np. -i eth0); -i any łapie ze wszystkich naraz.
  • -n — nie tłumaczy adresów IP na nazwy (a -nn pomija też mapowanie portów na nazwy usług). Szybciej i bez zbędnych zapytań DNS.
  • -c — kończy po przechwyceniu podanej liczby pakietów, np. -c 20.
  • -w — zapisuje surowe pakiety do pliku (format pcap) zamiast je wypisywać.
  • -r — czyta z zapisanego pliku pcap zamiast z interfejsu.
  • -A — pokazuje zawartość pakietów w ASCII (wygodne przy HTTP i tekstowych protokołach).
  • -X — wypisuje dane pakietu w hex i ASCII, przydatne przy grzebaniu w nieznanym protokole.
  • -e — dokłada nagłówek warstwy łącza, czyli adresy MAC źródła i celu.

Przykłady użycia

  • tcpdump -i eth0 -n — nasłuch na eth0 bez rozwiązywania nazw, wypisuje ruch na żywo.
  • tcpdump -i any -n port 443 — łapie tylko ruch HTTPS na wszystkich interfejsach.
  • tcpdump -i eth0 -n host 8.8.8.8 and icmp — pokazuje wyłącznie pingi do i od 8.8.8.8, idealne do diagnozy łączności.
  • tcpdump -i eth0 -c 100 -w zrzut.pcap port 53 — zapisuje 100 pakietów DNS do pliku, który potem otworzysz w Wiresharku.
  • tcpdump -r zrzut.pcap -nn -A — czyta wcześniej zapisany plik i pokazuje treść pakietów w ASCII.

Częste błędy i pułapki

tcpdump zwykle wymaga sudo albo uprawnień roota, bo grzebie w trybie promiscuous. Bez -n potrafi wisieć na odwrotnych zapytaniach DNS i mylić cię opóźnionym outputem, więc przy diagnozie sieci prawie zawsze dawaj -n. Nie myl filtra host z port ani nie wpisuj wyrażenia BPF przed opcjami z argumentem, bo shell się pogubi. Uważaj z -w na produkcji: zrzut całego ruchu na obciążonym serwerze urośnie do gigabajtów w kilka minut, dlatego łącz go z -c lub wąskim filtrem. Domyślnie starsze wersje ucinały pakiet do 68 bajtów przez snaplen; dziś -s 0 (pełny pakiet) jest zachowaniem domyślnym, ale w archaicznych systemach warto to jawnie ustawić. I pamiętaj, że -A pokaże ci treść, ale HTTPS i tak jest zaszyfrowany, więc nie licz na czytanie haseł.

Powiązane komendy: wireshark, tshark, ngrep, ss, netstat, ip, iftop, nmap.