znajdowanie PID procesu przy użyciu określonego portu


przegląd

wszyscy wiemy, że port może być używany tylko przez jedną aplikację lub usługę w tym samym czasie. Czasami musimy wiedzieć, który proces nasłuchuje na określonym porcie.

w tym tutorialu zobaczymy różne podejścia do znajdowania procesu nasłuchującego na danym porcie w Linuksie.

uprawnienia roota

w Linuksie tylko użytkownik roota lub właściciel procesu może uzyskać szczegółowe informacje o procesie.,

gdy chcemy sprawdzić proces nasłuchujący na danym porcie, nie wiemy do kogo należy ten proces.

z uprawnieniami roota możemy uzyskać wszystkie niezbędne informacje na temat procesu, na przykład identyfikator procesu.

dlatego może być konieczne uruchomienie naszych narzędzi sieciowych z użytkownikiem root (lub z sudo).

używając netstat

polecenie netstat jest członkiem pakietu net-tools.

w przeszłości był preinstalowany w wielu dystrybucjach Linuksa. Jednak pakiet net-tools nie został zaktualizowany od 2011 roku.,

z powodu braku wsparcia dla nowoczesnych funkcji jądra Linuksa i innych powodów, pakiet net-tools stał się przestarzały.

mimo to sam netstat jest nadal szeroko stosowany, więc rzućmy okiem na to, jak może pomóc.

Po pierwsze, zobaczmy Przykładowe wyjście polecenia netstat:

z opcjami ltnup, netstat pokazuje nam wszystkie używane porty w powyższym przykładzie.,

przyjrzyjmy się, co oznaczają te opcje:

  • l – Pokaż tylko nasłuchujące gniazda
  • t – Pokaż połączenia TCP
  • n – Pokaż adresy w postaci liczbowej
  • u – Pokaż połączenia UDP
  • p – pokaż ID procesu/nazwę programu

Jeśli przejrzymy powyższe wyjście, ostatnia kolumna jest dokładnie tym, czego szukamy: PID i Nazwa procesu nasłuchującego na określonym porcie.

możemy po prostu przekierować wyjście netstat do polecenia grep, aby uzyskać informacje o procesie na pojedynczym porcie.,

na przykład zobaczmy, który proces nasłuchuje na porcie 22:

root# netstat -ltnup | grep ':22'tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 575/sshd

używając ss

w poprzedniej sekcji omówiliśmy, że pakiet net-tools jest przestarzały.

polecenie ss jest zamiennikiem polecenia netstat.

teraz zobaczmy, jak użyć polecenia ss, aby zobaczyć, który proces nasłuchuje na porcie 22:

Jeśli sprawdzimy opcje, okaże się, że opcje, które przekazaliśmy do polecenia ss są takie same, jak przekazaliśmy do netstat.,

jedyną różnicą jest to, że korzystaliśmy z filtra stanu narzędzia ss zamiast dodatkowego procesu grep do filtrowania wyjścia.

podobnie jak w przypadku polecenia netstat, oczekiwane informacje o procesie również znajdują się w ostatniej kolumnie.

używając lsof

polecenie lsof może wyświetlić listę wszystkich otwartych plików w systemie Linux.,

możemy użyć polecenia lsof, aby znaleźć proces za pomocą określonego portu z opcją-i :numer portu:

root# lsof -i :22COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEsshd 575 root 3u IPv4 19373 0t0 TCP *:ssh (LISTEN)

pierwsze cztery kolumny w powyższym wyjściu mówią nam o nazwie procesu nasłuchującego na porcie 22, jego PID, właścicielu i deskryptorze pliku.

możemy przekazać multiple-i :port do polecenia lsof, aby dowiedzieć się, które procesy nasłuchują na różnych portach:

root# lsof -i :22 -i :68COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEsshd 575 root 3u IPv4 19373 0t0 TCP *:ssh (LISTEN)dhcpcd 8822 root 10u IPv4 49601 0t0 UDP *:bootpc

używając fuser

narzędzie fuser wyświetla, które procesy używają nazwanych plików, gniazd lub systemów plików., Jest on zawarty w pakiecie psmisc i domyślnie preinstalowany na wielu nowoczesnych dystrybucjach Linuksa.

możemy użyć tego do wyświetlenia informacji o procesie działającym na określonym porcie. Ponownie sprawdźmy PID przetwarzającego nasłuchującego portu TCP 22:

root# fuser 22/tcp22/tcp: 575

powyższe wyjście jest dość proste. Wiemy, że proces z PID 575 nasłuchuje na porcie TCP 22.

jednak nie podaje nam szczegółowych informacji o procesie, na przykład, jak nazywa się proces 575? kto jest właścicielem procesu? i tak dalej.,

jeśli chcemy uzyskać więcej szczegółów na temat procesu, możemy przekazać opcję „-v” poleceniu fuser, aby uzyskać szczegółowe dane wyjściowe:

root# fuser -v 22/tcp USER PID ACCESS COMMAND22/tcp: root 575 F.... sshd

używając polecenia fuser, możemy również sprawdzić informacje o uruchomionym procesie na wielu portach TCP lub UDP w jednym ujęciu:

root# fuser -v 22/tcp 68/udp USER PID ACCESS COMMAND22/tcp: root 575 F.... sshd68/udp: root 8822 F.... dhcpcd

podsumowanie

w tym krótkim artykule nauczyliśmy się czterech różnych narzędzi wiersza poleceń Linuksa z przykładami, aby dowiedzieć się informacji o procesie nasłuchującym na danym porcie.,

wszystkie są bardzo potężnymi narzędziami, które można mieć w naszym arsenale w Linuksowej linii poleceń.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Przejdź do paska narzędzi