Jak zabić proces Linuksa według numeru portu?

Jak zabić proces Linuksa według numeru portu?

Aby zabić proces Linuksa, potrzebujesz jego identyfikatora lub nazwy. Jeśli wszystko, co wiesz, to port, którego używa, czy możesz go zabić? Tak, na kilka różnych sposobów.

Procesy zabijania

Czasami proces Linuksa może przestać odpowiadać. Może przestać działać poprawnie lub nadal działać, ale zignorować żądania wyłączenia lub zacząć zużywać pamięć, procesor lub przepustowość sieci.

Niezależnie od motywów, istnieją sposoby na zabicie procesu z wiersza poleceń Linuksa. Klasyczną metodą jest użycie polecenia kill z identyfikatorem procesu, który chcesz zabić. Zespół killma kilku bliskich krewnych. Polecenie pkillzabije proces według nazwy i killallzabije wszystkie procesy, które znajdzie, które współdzielą część nazwy.

Jeśli wszystko, co wiesz o procesie, to to, że używa portu na twoim komputerze, nadal istnieją sposoby na jego zidentyfikowanie i zabicie. W kategoriach sieciowych „port” może oznaczać fizyczne połączenie, do którego podłącza się kabel z wtyczką na końcu, taki jak kabel sieciowy CAT5 lub 6 , lub może oznaczać port oprogramowania.

Port oprogramowania to ostatnia część połączenia sieciowego. Adres IP urządzenia identyfikuje komputer lub inne urządzenie sieciowe. Aplikacje wewnątrz komputera korzystają z różnych portów. Zapewniają inny poziom szczegółowości. Ruch sieciowy dociera do właściwego komputera przy użyciu adresu IP, a dzięki adresowaniu portów może być dostarczany do odpowiedniej aplikacji.

Jest to podobne do tego, w jaki sposób poczta dociera do hotelu, jest następnie sortowana i dostarczana do odpowiednich pokoi. Adres IP jest jak adres hotelu, a numery pokoi są jak numery portów.

Jeśli widzisz aktywność sieciową na porcie i nie rozpoznajesz procesu, który ją tworzy, lub jeśli jego zachowanie powoduje problemy lub podejrzenia, możesz chcieć zabić ten proces. Nawet jeśli wszystko, co znasz, to numer portu, możesz śledzić proces i go zabić.

Nawiązywanie połączeń z socat

Abyśmy mieli wiele połączeń do zabicia, użyjemy socatdo tworzenia połączeń sieciowych przy użyciu różnych protokołów. Będziesz musiał zainstalować socat. Aby zainstalować go na Ubuntu, użyj tego polecenia:

sudo apt install socat

Instalowanie gniazda na Ubuntu

W Fedorze użyj dnf:

sudo dnf install socat

Instalowanie gniazda w Fedorze

Na Manjaro musisz wpisać:

sudo pacman -S socat

Instalowanie soku na Manjaro

Składnia socatjest prosta, choć nieco gadatliwa. Musimy określić adres źródłowy i docelowy. Dla każdego z nich musimy określić protokół, adres IP oraz numer portu. Możemy zastąpić STDIN lub STDOUT jako źródło lub miejsce docelowe.

To polecenie tworzy połączenie między gniazdem nasłuchującym TCP na porcie 7889, adresem IP sprzężenia zwrotnego 127.0.0.1 i STDOUT. Znak ampersand „ &” uruchamia polecenie w tle, więc zachowujemy dostęp do wiersza poleceń.

socat tcp-listen:7889,bind=127.0.0.1 stdout &

Tworzenie nasłuchującego połączenia przez gniazdo TCP za pomocą socat

Utworzymy jeszcze dwa połączenia, dzięki czemu będziemy mieli mały wybór gniazd korzystających z różnych protokołów. Utworzymy połączenie UDP i połączenie SCTP . Jedyną częścią polecenia, która się zmienia, jest protokół.

socat udp-listen:7889,bind=127.0.0.1 stdout & socat sctp-listen:9999,bind=127.0.0.1 stdout &

Tworzenie połączeń nasłuchujących przez gniazda UDP i SCTP za pomocą socat

Użycie zabójstwa

Oczywiście możemy użyć killdo zakończenia procesu, jeśli znamy identyfikator procesu. Aby znaleźć PID możemy użyć lsofpolecenia.

Aby wyświetlić szczegóły procesu na porcie 7889, który korzysta z protokołu TCP, używamy opcji -i(adres internetowy), jak pokazano tutaj.

lsof -i tcp:7889

Używanie lsof do wyświetlania szczegółów procesu przy użyciu określonego portu i protokołu.

PID tego procesu to 3141 i możemy go użyć z kill:

sudo kill 3141

Możemy zaoszczędzić trochę wysiłku, jeśli użyjemy rur. Jeśli skierujemy wyjście lsofdo awki polecenie awk, aby wyszukać wiersze zawierające interesujący nas port – 7889 – i wydrukujemy drugie pole z tego wiersza, izolujemy PID.

lsof -i tcp:7889 | awk '/7889/{print $2}'

Potocz wyjście lsof do awk

Następnie możemy przekazać dane wyjściowe awkdo killpolecenia za pomocą xargs. Polecenie xargspobiera dane wejściowe przez potok i przekazuje je do innego polecenia jako parametry wiersza polecenia. Skorzystamy xargsz killzespołem.

lsof -i tcp:7889 | awk '/7889/{print $2}' | xargs kill

Używanie potoków do przesyłania wyjścia lsof do awk iz awk do xargs i kill

Nie otrzymujemy żadnych wizualnych informacji zwrotnych. W typowym dla Linuksa stylu brak wiadomości to dobra wiadomość. Jeśli chcesz się upewnić, że proces został zakończony, możesz użyć lsofponownie.

lsof -i tcp:7889

Używanie lsof do wyszukiwania szczegółów procesu przy użyciu określonego portu i protokołu bez powodzenia

Ponieważ lsofnic nie zgłasza, wiemy, że nie ma takiego połączenia.

Możemy usunąć proces korzystający z protokołu UDP, po prostu zastępując „tcp” słowem „udp” w naszym poprzednim poleceniu.

lsof -i udp:7889 | awk '/7889/{print $2}' | xargs kill

Używanie potoków do potokowania wyjścia lsof do awk iz awk do xargs i zabicia dla gniazda UDP

Jednak lsofnie rozpoznaje protokołu SCTP.

lsof -i sctp:7889

lsof nie działa z protokołem SCTP

W tym celu możemy użyć sspolecenia. Używamy opcji -S(SCTP) do wyszukiwania gniazd SCTP, opcji -a(wszystkie) do wyszukiwania wszystkich typów gniazd (nasłuchujących, odbierających, podłączonych itp.) oraz opcji -p(processes) do wyświetlania informacji o procesie za pomocą gniazdo elektryczne.

ss -Sap

Drukuj szczegóły procesu za pomocą gniazda SCTP z ss

Możemy przeanalizować to wyjście za pomocą grepi awk. Moglibyśmy również przeanalizować go za pomocą grepwyrażeń regularnych PERL, ale ten sposób jest znacznie łatwiejszy do zrozumienia. Gdybyś miał użyć tego więcej niż raz lub dwa razy, prawdopodobnie uczyniłbyś z niego alias lub funkcję powłoki.

Wyślemy wynik z ssdo grepi znajdziemy nasz numer portu, 7889. Wyślemy wynik z grepdo awk. W programie awkużywamy -Fopcji (ciąg separatora), aby ustawić przecinek ” ,” jako separator pól. Szukamy wiersza zawierającego „pid=” i wypisujemy drugie pole oddzielone przecinkami z tego wiersza.

ss -Sap | grep "7889"| awk -F',' '/pid=/{print $2}'

Używanie potoków do łączenia ss, grep i awk do wyodrębniania ciągu PID

To dało nam ciąg „pid=2859”.

Możemy przekazać to awkponownie, ustawić separator pól na znak równości ” =” i wydrukować drugie pole z tej linii, które będzie tekstem za znakiem równości.

ss -Sap | grep "7889"| awk -F',' '/pid=/{print $2}' | awk -F'=' '{print $2}'

Używanie potoków do łączenia ss, grep i awk dwa razy, aby wyodrębnić PID

Wyizolowaliśmy teraz identyfikator procesu. Możemy użyć xargsdo przekazania PID jako killparametru wiersza poleceń.

ss -Sap | grep "7889"| awk -F',' '/pid=/{print $2}' | awk -F'=' '{print $2}' | xargs kill

Używanie potoków z ss, grep, awk i xargs do zakończenia procesu gniazda SCTP

To zabija proces, który używał gniazda protokołu SCTP na porcie 7889.

Zespół utrwalający

Polecenie fuserznacznie upraszcza pracę. Minusem jest to, że działa tylko z gniazdami TCP i UDP. Plusem są dwa najpopularniejsze typy gniazd, z którymi będziesz musiał sobie poradzić. Polecenie fuserzostało już zainstalowane na testowanych przez nas maszynach Ubuntu, Fedora i Manjaro.

Wszystko, co musisz zrobić, to użyć opcji -k(zabij) i określić port i protokół. Możesz użyć -nopcji (przestrzeń nazw) i określić protokół i port lub użyć „formatu etykiety z ukośnikiem” i najpierw określić numer portu.

fuser -n tcp 7889 fuser 7889/udp

Używanie polecenia fuser do zabijania procesów za pomocą gniazd TCP i UDP

Numer portu, protokół i PID zakończonego procesu są drukowane w oknie terminala.

Najpierw wypróbuj utrwalacz

Najprawdopodobniej zostanie zainstalowany na komputerze, na którym pracujesz, a protokołem najprawdopodobniej będzie TCP lub UDP, więc istnieje duża szansa, że ​​najłatwiejszy sposób zadziała.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *