Lista portów, na których nasłuchuje proces PID (najlepiej przy użyciu narzędzi iproute2)?


68

Chcę wyświetlić listę wszystkich portów, na których aktualnie nasłuchuje PID.

Jak poleciłbyś uzyskać takie dane na temat procesu?


Co dziwne, ssnie ma filtrowania na PID, z wyjątkiem gniazd netlink.
poige

Odpowiedzi:


56

Możesz użyć ssz 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.


3
Istnieje również -ulub tylko -tdla udb lub tcp. : +1: I to wszystko można tak ss -tlnpss -tlnp | cat
ułożyć w

1
Przyzwyczaiłem się 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
ThorSummoner,

Nie działało dla mnie (w Debianie 9). Tam musisz grep dla ", pid = 1234,"
ofrommel

@ofrommel dzięki za podpowiedź - dostosowałem odpowiedź.
jofel


56

Nie znam sposobu korzystania z iproute2narzę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.


13

Możesz użyć netstatdo 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

1
Dziękuję, chociaż zostałem poinformowany, że netstatzostał wycofany przez narzędzia iproute2 i chcę tego uniknąć.
ThorSummoner

12

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 .

Bibliografia


1

Inna metoda, lsofjeśli nie znasz PID, a jedynie nazwę programu:

lsof -Pa -p $(pgrep [programName]) -i

nie działa z lsof4.89 na Ubuntu 16.04
palik

1
Tak będzie w przypadku, gdy program utworzył wiele procesów. W takim przypadku będziesz musiał podać konkretny PID podczas uruchamiania polecenia lsof, które wydałem. pgrep <program name>następnie wybierz PID potrzebny do powyższego polecenia. zamieniając $(pgrep [programName])na PID #
cryptoboy

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.