Chcę wyświetlić listę wszystkich portów, na których aktualnie nasłuchuje PID.
Jak poleciłbyś uzyskać takie dane na temat procesu?
Chcę wyświetlić listę wszystkich portów, na których aktualnie nasłuchuje PID.
Jak poleciłbyś uzyskać takie dane na temat procesu?
Odpowiedzi:
Możesz użyć ss
z pakietu iproute2 (który jest podobny do netstat
):
ss -l -p -n | grep "pid=1234,"
lub (dla starszej wersji iproute2):
ss -l -p -n | grep ",1234,"
Zamień 1234 na PID programu.
-u
lub tylko -t
dla udb lub tcp. : +1: I to wszystko można tak ss -tlnp
ss -tlnp | cat
ss -nlp | cat
, to z grubsza, pokaż mi procesy nasłuchiwania (-l), ich numery portów (-n) i informacje o ich procesach (-p) i nie próbuj dopasowywać danych wyjściowych do mojej powłoki | cat
( lub mniej lub cokolwiek). Dopiero po dwóch latach przyzwyczaiłem się do tego: D
Nie znam sposobu korzystania z iproute2
narzędzi. Ale w celu obejścia tego problemu możesz wypróbować ten.
lsof -Pan -p PID -i
powinien dać ci informacje, których szukasz.
Wynik
lsof -Pan -p 27808 -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 27808 apache 5u IPv6 112811294 0t0 TCP *:80 (LISTEN)
httpd 27808 apache 7u IPv6 112811298 0t0 TCP *:8443 (LISTEN)
httpd 27808 apache 9u IPv6 112811303 0t0 TCP *:443 (LISTEN)
Dostałem to polecenie stąd, ale nie jestem pewien dokładnego linku, ponieważ wszystkie zapisałem w notatniku. Ale możesz sprawdzić również stamtąd.
Możesz użyć netstat
do tego, aby ustalić pid każdego procesu nasłuchiwania.
netstat - Drukuj połączenia sieciowe, tabele routingu, statystyki interfejsu, połączenia maskaradowe i członkostwa multiemisji
-a, --all Pokazuje gniazda nasłuchujące i nie nasłuchujące (dla TCP oznacza to ustanowione połączenia). Dzięki opcji --interfaces wyświetl interfejsy, które nie są oznaczone
--numeric, -n Pokazuje adresy numeryczne zamiast próbować określić symboliczny host, port lub nazwę użytkownika.
-p, --program Pokazuje PID i nazwę programu, do którego należy każde gniazdo.
Oto przykład:
# netstat -anp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1507/rpcbind
tcp 0 0 0.0.0.0:51188 0.0.0.0:* LISTEN 1651/rpc.statd
tcp 0 0 0.0.0.0:1013 0.0.0.0:* LISTEN 1680/ypbind
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1975/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1763/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2081/master
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 2119/mongod
tcp 0 48 172.16.33.73:22 172.16.127.110:51850 ESTABLISHED 25473/sshd
tcp 0 0 172.16.33.73:22 172.16.127.110:51214 ESTABLISHED 24699/sshd
tcp 0 0 :::111 :::* LISTEN 1507/rpcbind
tcp 0 0 :::9200 :::* LISTEN 1994/java
tcp 0 0 :::9300 :::* LISTEN 1994/java
tcp 0 0 :::22 :::* LISTEN 1975/sshd
tcp 0 0 ::1:631 :::* LISTEN 1763/cupsd
tcp 0 0 ::1:25 :::* LISTEN 2081/master
tcp 0 0 :::59162 :::* LISTEN 1651/rpc.statd
netstat
został wycofany przez narzędzia iproute2 i chcę tego uniknąć.
Odpowiedź @ jofel pokazuje odpowiednie narzędzie do użycia ss
, oto zamienniki innych narzędzi sieciowych w iproute2.
Przestarzałe polecenia i ich odpowiedniki iproute2 są następujące:
deprecated replacement(s)
========== ==============
- arp ip n (ip neighbor)
- ifconfig ip a (ip addr), ip link, ip -s (ip -stats)
- iptunnel ip tunnel
- iwconfig iw
- nameif ip link, ifrename
- netstat ss, ip route (for netstat-r), ip -s link (for netstat -i),
ip maddr (for netstat-g)
- route ip r (ip route)
Podstawowa lista znajduje się również tutaj na Wikipedii: http://en.wikipedia.org/wiki/Iproute2 .
Inna metoda, lsof
jeśli nie znasz PID, a jedynie nazwę programu:
lsof -Pa -p $(pgrep [programName]) -i
lsof
4.89 na Ubuntu 16.04
pgrep <program name>
następnie wybierz PID potrzebny do powyższego polecenia. zamieniając $(pgrep [programName])
na PID #
ss
nie ma filtrowania na PID, z wyjątkiem gniazd netlink.