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