ngrep

Filtruje przechwytywany ruch sieciowy po wzorcach tekstowych (grep dla pakietów).

ngrep (network grep) to sniffer pakietów, który działa jak grep przyłożony do ruchu sieciowego. Zamiast przekopywać się przez ściany hexa w tcpdump, podajesz wzorzec (wyrażenie regularne albo ciąg hex) i ngrep pokazuje tylko te pakiety, których ładunek (payload) pasuje. Świetnie sprawdza się, gdy chcesz na żywo podejrzeć, co leci w protokołach tekstowych: HTTP, SMTP, FTP, SIP czy zapytania DNS. Pod spodem korzysta z libpcap i rozumie te same filtry BPF, co tcpdump, więc łączysz dopasowanie po treści z filtrowaniem po portach i adresach. Do nasłuchu na interfejsie potrzebujesz uprawnień roota (zwykle sudo).

Składnia i najważniejsze opcje

Podstawowa forma to ngrep [opcje] wzorzec [filtr_bpf], gdzie wzorzec to regex dopasowywany do treści pakietu, a filtr_bpf to opcjonalny filtr w stylu tcpdump.

  • -d iface — wskazuje interfejs do nasłuchu (np. eth0, any); bez niego ngrep wybiera interfejs domyślny.
  • -q — tryb cichy: bez sypania znakami # dla niepasujących pakietów, tylko nagłówki i treść dopasowań.
  • -i — ignoruje wielkość liter we wzorcu.
  • -t — dokleja znacznik czasu (RRRR/MM/DD GG:MM:SS) przy każdym dopasowaniu; -T pokazuje różnicę czasu od poprzedniego pakietu.
  • -W byline — honoruje znaki nowej linii w treści, dzięki czemu nagłówki HTTP są czytelne, a nie sklejone w jedną linię.
  • -x — wypisuje treść w hex i ASCII; -X pozwala podać wzorzec jako ciąg szesnastkowy.
  • -n liczba — kończy działanie po dopasowaniu zadanej liczby pakietów.
  • -O plik — zapisuje pasujące pakiety do pliku pcap; -I plik czyta z istniejącego pcap zamiast z interfejsu.

Przykłady użycia

  • sudo ngrep -d eth0 -W byline 'GET|POST' tcp port 80 — podgląda na żywo zapytania HTTP na porcie 80, ładnie łamiąc nagłówki po liniach.
  • sudo ngrep -q -i 'password' tcp — cicho wyławia każdy pakiet TCP, w którego treści pojawia się słowo „password”.
  • sudo ngrep -d any port 53 — pokazuje ruch DNS na wszystkich interfejsach, przydatne przy diagnozie rozwiązywania nazw.
  • sudo ngrep -t -W byline 'Host:' host 10.0.0.5 — śledzi nagłówki Host wymieniane z konkretną maszyną, z czasem przy każdym trafieniu.
  • ngrep -I ruch.pcap -W byline 'User-Agent' — przeszukuje wcześniej zapisany plik pcap pod kątem nagłówków User-Agent, bez ruszania karty sieciowej.

Częste błędy i pułapki

Najczęstszy zgrzyt to brak uprawnień: bez sudo dostaniesz „pcap_open_live: Operation not permitted” albo pustkę. Drugi klasyk to mylenie wzorca z filtrem BPF — wzorzec dopasowuje treść pakietu, a filtr za nim ogranicza, jakie pakiety w ogóle łapiemy. Pamiętaj też, że ngrep widzi tylko payload w czystej postaci: ruch zaszyfrowany (HTTPS, SSH) zobaczysz, ale jego treść będzie nieczytelnym szyfrogramem, więc szukanie tam haseł nic nie da. Na koniec prawo: podsłuchiwanie cudzego ruchu w sieci, której nie jesteś administratorem, bywa przestępstwem — rób to tylko na własnych systemach.

Powiązane komendy: tcpdump, wireshark, tshark, grep, tcpflow.