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
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
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.
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.
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"
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ą.
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:
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.
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:
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:
Ta składnia ma możliwość wyprowadzania w oknie "Terminal" bez korzystania z dodatkowych opcji.
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:
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:
Ponadto w składni polecenia można określić opcję -vv lub -vvv , co dodatkowo zwiększy ilość informacji wyświetlanych na ekranie.
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:
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:
Obie te opcje są idealne, gdy trzeba zapisać duże ilości tekstu w celu późniejszego przeanalizowania.
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:
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:
Jak widać, w składni polecenia zmieniliśmy filtr dst na src , co oznacza, że maszyna wyszukuje nadawcę według adresu IP.
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:
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.
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:
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.
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:
Jeśli chcesz wyświetlić pakiety http, musisz wpisać port 80:
sudo tcpdump -vv -i ppp0 port 80
Przykład:
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
Jak widać, nie trzeba określać dodatkowych opcji w połączeniu z filtrem Portort . Wystarczy ustawić zasięg.
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:
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
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:
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:
Teraz pokażmy w pakietach "Terminal" , które są większe niż 50 bitów:
sudo tcpdump -i ppp0 greater 50
Przykład:
Jak widać, są one stosowane jednakowo, różnica jest tylko w nazwie filtra.
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.