Jeśli chcesz analizować lub przechwytywać pakiety sieciowe w systemie Linux, najlepiej użyć narzędzia konsoli tcpdump . Ale problem pojawia się w dość skomplikowanym zarządzaniu. Zwykły użytkownik zauważy, że praca z narzędziem jest niewygodna, ale tylko na pierwszy rzut oka. W tym artykule dowiesz się, jak struktura tcpdump jest zbudowana, jaka jest jego składnia, jak z niej korzystać, a także podaje liczne przykłady jej użycia.

Czytaj także: Podręczniki do konfigurowania połączenia z Internetem w Ubuntu , Debian , Serwer Ubuntu

Instalacja

Większość programistów systemów operacyjnych opartych na Linuksie zawiera narzędzie tcpdump na wstępnie zainstalowanej liście, ale jeśli z jakiegoś powodu nie znajduje się ono w twojej dystrybucji, zawsze możesz je pobrać i zainstalować za pośrednictwem "Terminala" . Jeśli twój system operacyjny jest oparty na Debianie, a jest to Ubuntu, Linux Mint, Kali Linux i tym podobne, musisz uruchomić to polecenie:

sudo apt install tcpdump

Podczas instalacji musisz podać hasło. Zauważ, że podczas pisania nie jest wyświetlany i musisz wpisać znak "D" i naciśnij Enter, aby potwierdzić instalację.

Jeśli masz Red Hata, Fedorę lub CentOS, polecenie instalacji będzie wyglądało tak:

sudo yam install tcpdump

Po zainstalowaniu narzędzia można go natychmiast użyć. O tym i wiele więcej zostanie omówionych w dalszej części tekstu.

Czytaj także: Przewodnik po instalacji PHP dla Ubuntu Server

Składnia

Jak każde inne polecenie, tcpdump ma swoją własną składnię. Znając to, możesz ustawić wszystkie niezbędne parametry, które będą brane pod uwagę podczas wykonywania polecenia. Składnia jest następująca:

tcpdump опции -i интерфейс фильтры

Podczas korzystania z polecenia należy określić interfejs śledzenia. Filtry i opcje nie są zmiennymi obowiązkowymi, ale umożliwiają bardziej elastyczne dostosowywanie.

Opcje

Chociaż nie musisz określać opcji, musisz podać dostępne opcje. Tabela pokazuje nie wszystkie ich listy, ale tylko najbardziej popularne, ale są one wystarczające, aby rozwiązać większość zadań.

Opcja Definicja
-A Umożliwia sortowanie pakietów w formacie ASCII
-l Dodaje funkcję przewijania
-i Po wprowadzeniu musisz określić interfejs sieciowy, który będzie monitorowany. Aby rozpocząć śledzenie wszystkich interfejsów, wpisz słowo "dowolne" po opcji
-c Kończy proces śledzenia po sprawdzeniu określonej liczby pakietów
-w Generuje plik tekstowy z raportem weryfikacyjnym
-e Wskazuje poziom połączenia internetowego pakietu danych
-L Wyprowadza tylko te protokoły, które obsługują określony interfejs sieciowy
-C Tworzy kolejny plik podczas pisania pakietu, jeśli jego rozmiar jest większy niż podany
-r Otwiera plik odczytu utworzony za pomocą opcji -w
-j Aby nagrać pakiety, użyty zostanie format TimeStamp
-J Pozwala wyświetlić wszystkie dostępne formaty TimeStamp
-G Służy do utworzenia pliku z dziennikami. Opcja wymaga również wartości tymczasowej, po której zostanie utworzony nowy dziennik
-v, -vv, -vvv W zależności od liczby znaków w opcji wyjście polecenia staje się bardziej szczegółowe (wzrost jest wprost proporcjonalny do liczby znaków)
-f Dane wyjściowe pokazują nazwę domeny adresu IP
-F Umożliwia odczytanie informacji nie z interfejsu sieciowego, ale z określonego pliku
-D Demonstruje wszystkie interfejsy sieciowe, z których można korzystać
-n Dezaktywuje wyświetlanie nazw domen
-Z Określa użytkownika, którego konto utworzy wszystkie pliki
-K Brakująca analiza sumy kontrolnej
-q Demonstracja krótkich informacji
-H Wykrywa nagłówki 802.11
-I Używane podczas przechwytywania pakietów w trybie monitorowania

Po zdemontowaniu opcji, tuż poniżej przejdziemy bezpośrednio do ich aplikacji. W międzyczasie zostaną uwzględnione filtry.

Filtry

Jak wspomniano na samym początku artykułu, możesz dodać filtry do składni tcpdump. Teraz najbardziej popularne z nich będą brane pod uwagę:

Filtruj Definicja
host Określa nazwę hosta
netto Określa podsieć IP i sieć
ip Obsługuje adres protokołu
src Wyświetla pakiety, które zostały wysłane z podanego adresu
dst Wyświetla pakiety odebrane przez podany adres
arp, udp, tcp Filtrowanie według jednego z protokołów
port Wyświetla informacje dotyczące określonego portu
i, lub Służy do scalania wielu filtrów w komendę
mniej, większa Wyjście pakietów mniejsze lub większe niż określony rozmiar

Wszystkie powyższe filtry można łączyć ze sobą, więc wydając polecenie, zobaczysz tylko te informacje, które chcesz zobaczyć. Aby lepiej zrozumieć użycie powyższych filtrów, warto podać przykłady.

Czytaj także: Często używane polecenia w systemie Linux "Terminal"

Przykłady użycia

Powszechnie używane opcje składni polecenia tcpdump są teraz wyświetlane. Nie można ich wszystkich wymienić, ponieważ ich odmiany mogą być nieskończoną liczbą.

Zobacz listę interfejsów

Zaleca się, aby każdy użytkownik początkowo sprawdził listę wszystkich swoich interfejsów sieciowych, które można śledzić. Z powyższej tabeli wiemy, że musisz użyć opcji -D , więc uruchom następującą komendę w terminalu:

sudo tcpdump -D

Przykład:

Uruchamianie polecenia tcpdump z opcją d w systemie Linux

Jak widać, w przykładzie jest osiem interfejsów, które można wyświetlić za pomocą polecenia tcpdump. W artykule podam przykłady z ppp0 , możesz użyć dowolnego innego.

Normalne przechwytywanie ruchu

Jeśli chcesz prześledzić jeden interfejs sieciowy, możesz to zrobić za pomocą opcji -i . Nie zapomnij podać nazwy interfejsu po jego wprowadzeniu. Oto przykład wykonania takiego polecenia:

sudo tcpdump -i ppp0

Uwaga: przed samym poleceniem musisz wpisać "sudo", ponieważ wymaga ono prawa administratora.

Przykład:

przykład mapowania ruchu sieciowego za pomocą polecenia tcpdump bez użycia opcji i filtrów

Uwaga: po naciśnięciu Enter w "Terminalu", przechwycone pakiety będą wyświetlane w sposób ciągły. Aby zatrzymać ich przepływ, musisz nacisnąć kombinację klawiszy Ctrl + C.

Jeśli uruchomisz polecenie bez dodatkowych opcji i filtrów, zobaczysz następujący format wyświetlania śledzonych pakietów:

22:18:52.597573 IP vrrp-topf2.p.mail.ru.https > 10.0.6.67.35482 : Flags [P.], seq 1:595, ack 1118, win 6494, options [nop,nop,TS val 257060077 ecr 697597623], length 594

Gdzie kolor jest podświetlony:

  • niebieski - czas odbioru paczki;
  • pomarańczowy - wersja protokołu;
  • zielony - adres nadawcy;
  • fioletowy - adres odbiorcy;
  • szary - dodatkowe informacje o tcp;
  • czerwony - rozmiar pakietu (wyświetlany w bajtach).

Ta składnia ma możliwość wyprowadzania w oknie "Terminal" bez korzystania z dodatkowych opcji.

Uchwyć ruch za pomocą opcji -v

Jak wiadomo z tabeli opcja -v pozwala zwiększyć ilość informacji. Będziemy analizować na przykładzie. Sprawdźmy ten sam interfejs:

sudo tcpdump -v -i ppp0

Przykład:

przykład mapowania ruchu sieciowego za pomocą polecenia tcpdump za pomocą opcji -v w systemie Linux

Tutaj widać, że na wyjściu pojawił się następujący wiersz:

IP (tos 0x0, ttl 58 , id 30675, offset 0, flags [DF] , proto TCP (6) , length 52

Gdzie kolor jest podświetlony:

  • pomarańczowy - wersja protokołu;
  • niebieski - oczekiwana długość życia protokołu;
  • zielony - długość pola nagłówka;
  • purple - wersja pakietu tcp;
  • czerwony - rozmiar paczki.

Ponadto w składni polecenia można określić opcję -vv lub -vvv , co dodatkowo zwiększy ilość informacji wyświetlanych na ekranie.

Opcja -w i -r

Tabela opcji wspomniała o możliwości zapisania wszystkich danych wyjściowych w oddzielnym pliku, dzięki czemu można je później przeglądać. Opcja -w jest za to odpowiedzialna. Aby go użyć jest dość proste, wystarczy wskazać polecenie, a następnie wprowadzić nazwę przyszłego pliku z rozszerzeniem ".pcap" . Rozważmy wszystkie na przykładzie:

sudo tcpdump -i ppp0 -w file.pcap

Przykład:

przykład opcji -w w poleceniu tcpdump w systemie Linux

Uwaga: podczas nagrywania dzienników w pliku na ekranie "Terminal" nie wyświetla się żaden tekst.

Aby wyświetlić nagrane dane wyjściowe, należy użyć opcji -r , po której nastąpi zapisanie nazwy nagranego wcześniej pliku. Jest używany bez innych opcji i filtrów:

sudo tcpdump -r file.pcap

Przykład:

przykład przeglądania wcześniej zapisanego pliku polecenia tcpdump z opcją w

Obie te opcje są idealne, gdy trzeba zapisać duże ilości tekstu w celu późniejszego przeanalizowania.

Filtrowanie IP

Z tabeli filtrowania wiemy, że dst pozwala wyświetlać tylko te pakiety, które zostały odebrane przez adres na ekranie konsoli, zgodnie ze składnią polecenia. W związku z tym bardzo wygodne jest przeglądanie pakietów odebranych przez komputer. Aby to zrobić, musisz tylko określić swój adres IP w zespole:

sudo tcpdump -i ppp0 ip dst 10.0.6.67

Przykład:

przykład użycia filtra dst i ip w komendzie tcpdump w systemie Linux

Jak widać, oprócz dst , w zespole napisaliśmy także filtr IP . Innymi słowy, powiedzieliśmy komputerowi, że wybierając pakiety, zwraca uwagę na ich adres IP, a nie na inne parametry.

Według adresu IP możesz filtrować i wysyłać pakiety. W tym przykładzie zwracamy nasz adres IP. Teraz będziemy śledzić, które pakiety są wysyłane z naszego komputera na inne adresy. Aby to zrobić, wykonaj następujące polecenie:

sudo tcpdump -i ppp0 ip src 10.0.6.67

Przykład:

przykład użycia filtra src i ip w poleceniu tcpdump w linuxie

Jak widać, w składni polecenia zmieniliśmy filtr dst na src , co oznacza, że ​​maszyna wyszukuje nadawcę według adresu IP.

Filtrowanie przez HOST

Analogicznie do adresu IP w poleceniu możemy określić filtr hosta, aby wydzielić pakiety z interesującym nas hostem. Oznacza to, że w składni, zamiast adresu IP nadawcy / odbiorcy, konieczne będzie określenie jego hosta. Wygląda to tak:

sudo tcpdump -i ppp0 dst host google-public-dns-a.google.com

Przykład:

przykład użycia dst i filtra hosta w komendzie tcpdump w systemie Linux

Na obrazie widać, że w "Terminalu" wyświetlane są tylko te pakiety, które zostały wysłane z naszego adresu IP do hosta google.com. Jak widać, zamiast hosta google, możesz wpisać dowolną inną.

Podobnie jak w przypadku filtrowania IP, składnia dst może zostać zastąpiona przez src, aby zobaczyć pakiety, które są wysyłane do twojego komputera:

sudo tcpdump -i ppp0 src host google-public-dns-a.google.com

Uwaga: filtr hosta musi być ustawiony po dst lub src, w przeciwnym razie polecenie wygeneruje błąd. W przypadku filtrowania IP przeciwnie, dst i src znajdują się przed filtrem IP.

Zastosuj i i filtruj

Jeśli musisz użyć kilku filtrów jednocześnie w tym samym poleceniu, musisz zastosować opcję i lub lub filtr (w zależności od przypadku). Określając filtry w składni i rozdzielając je za pomocą tego operatora, "zmuszasz" je do działania jako jedne. Na przykład wygląda to tak:

sudo tcpdump -i ppp0 ip dst 95.47.144.254 or ip src 95.47.144.254

Przykład:

przykład użycia polecenia i i w komendzie tcpdump w systemie Linux

Ze składni polecenia jasno wynika, że ​​chcemy wyświetlić na ekranie "Terminal" wszystkie pakiety wysłane na adres 95.47.144.254 i pakiety odebrane przez ten sam adres. Możesz także zmienić niektóre zmienne w tym wyrażeniu. Na przykład, zamiast adresu IP, określ HOST lub zastąp adresy samodzielnie.

Port i portortuj filtr

Filtr portów jest idealny, gdy potrzebujesz informacji o pakietach z określonym portem. Tak więc, jeśli potrzebujesz tylko odpowiedzi lub zapytań DNS, musisz określić port 53:

sudo tcpdump -vv -i ppp0 port 53

Przykład:

przykład użycia filtru portu w komendzie tcpdump w systemie Linux

Jeśli chcesz wyświetlić pakiety http, musisz wpisać port 80:

sudo tcpdump -vv -i ppp0 port 80

Przykład:

przykład zastosowania filtru portu w komendzie tcpdump w systemie Linux

Między innymi możliwe jest śledzenie zakresu portów jednocześnie. W tym celu używany jest filtr portortu :

sudo tcpdump portrange 50-80

przykład użycia filtru Portrange w składni polecenia tcpdump w Linuksie

Jak widać, nie trzeba określać dodatkowych opcji w połączeniu z filtrem Portort . Wystarczy ustawić zasięg.

Filtrowanie według protokołów

Możesz także wyświetlać tylko ruch odpowiadający dowolnemu protokołowi. Aby to zrobić, musisz użyć nazwy tego protokołu jako filtra. Rzućmy okiem na przykład udp :

sudo tcpdump -vvv -i ppp0 udp

Przykład:

przykład filtrowania polecenia tcpdump przez protokół w systemie Linux

Jak widać na obrazku, po wykonaniu polecenia, tylko pakiety z protokołem udp były wyświetlane w "Terminalu" . Odpowiednio, możesz wykonać filtrowanie na innych, na przykład arp :

sudo tcpdump -vvv -i ppp0 arp

lub tcp :

sudo tcpdump -vvv -i ppp0 tcp

Filtr siatkowy

Operator sieci pomaga filtrować pakiety, biorąc za podstawę wyznaczenie ich sieci. Aby użyć go tak samo, jak reszty - musisz podać atrybut net w składni, a następnie wprowadzić adres sieciowy. Oto przykład takiego polecenia:

sudo tcpdump -i ppp0 net 192.168.1.1

Przykład:

przykład filtrowania polecenia tcpdump przez oznaczenie sieci w systemie Linux

Filtruj według rozmiaru pakietu

Nie rozważaliśmy jeszcze dwóch interesujących filtrów: coraz mniej . Z tabeli z filtrami wiemy, że służą one do wysyłania pakietów danych większych ( mniej ) lub mniejszych ( większych ) o rozmiarze określonym po wprowadzeniu atrybutu.

Załóżmy, że chcemy monitorować tylko pakiety, które nie przekraczają znaku 50 bitów, wtedy polecenie będzie wyglądać tak:

sudo tcpdump -i ppp0 less 50

Przykład:

filtruj pakiety według ich filtru rozmiaru mniej w komendzie tcpdump w systemie Linux

Teraz pokażmy w pakietach "Terminal" , które są większe niż 50 bitów:

sudo tcpdump -i ppp0 greater 50

Przykład:

filtrowanie pakietów przez ich filtr wielkości większy w komendzie tcpdump w systemie Linux

Jak widać, są one stosowane jednakowo, różnica jest tylko w nazwie filtra.

Wniosek

Na zakończenie artykułu można stwierdzić, że polecenie tcpdump jest doskonałym narzędziem, za pomocą którego można śledzić każdy pakiet danych przesyłany przez Internet. Ale do tego nie wystarczy wejść do zespołu w "Terminalu" . Osiągnięcie pożądanego rezultatu będzie możliwe tylko wtedy, gdy użyjesz wszystkich rodzajów opcji i filtrów, a także ich kombinacji.