Lister les ports sur lesquels un PID de processus écoute (de préférence avec les outils iproute2)?

68

Je cherche à lister tous les ports sur lesquels un PID est en train d'écouter.

Comment recommanderiez-vous que je reçoive ce type de données sur un processus?

ThorSummoner
la source
Assez bizarre ssn'a pas de filtrage sur PID sauf pour les sockets netlink.
Poige

Réponses:

56

Vous pouvez utiliser ssle package iproute2 (qui est similaire à netstat):

ss -l -p -n | grep "pid=1234,"

ou (pour l'ancienne version d'iproute2):

ss -l -p -n | grep ",1234,"

Remplacez 1234 par le PID du programme.

jofel
la source
3
Il y a aussi -uou -tpour udb ou tcp uniquement. : +1: Et ceux-ci peuvent tous être empilés comme ss -tlnpss -tlnp | cat
suit:,
1
Je me suis habitué ss -nlp | cat, en gros, à me montrer les processus d’écoute (-l), leurs numéros de port (-n) et leurs informations de processus (-p), et n’essayez pas d’adapter la sortie à mon shell | cat( ou moins ou peu importe).
Cela
Cela n'a pas fonctionné pour moi (sur Debian 9). Là vous devez grep pour ", pid = 1234,"
ofrommel
@ofrommel merci pour l'allusion - j'ai adapté la réponse.
jofel
En outre, cela ne fonctionne qu'avec les autorisations root :)
ofrommel
57

Je ne suis pas au courant d'un moyen d'utiliser des iproute2outils. Mais pour contourner le problème, vous pouvez essayer celui-ci.

lsof -Pan -p PID -i

devrait vous donner les informations que vous recherchez.


Sortie

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)

J'ai reçu cette commande d' ici mais je ne suis pas sûr du lien exact puisque je les ai tous notés dans le cahier. Mais vous pouvez aussi partir de là.

Ramesh
la source
13

Vous pouvez utiliser netstatpour cela déterminer le pid de chaque processus d'écoute.

netstat - Imprimez les connexions réseau, les tables de routage, les statistiques d'interface, les connexions masquées et les appartenances à la multidiffusion

-a, --all Afficher les sockets à la fois d'écoute et de non-écoute (pour TCP, cela signifie des connexions établies). Avec l'option --interfaces, affichez les interfaces non marquées

--numeric, -n Affiche les adresses numériques au lieu d'essayer de déterminer les noms symboliques d'hôte, de port ou d'utilisateur.

-p, --program Affiche le PID et le nom du programme auquel chaque socket appartient.

Voici un exemple:

# 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
Raza
la source
1
Merci bien que netstatje sache que les outils iproute2 sont obsolètes et que je cherche à l'éviter.
ThorSummoner
12

La réponse de @ jofel vous montre l'outil approprié à utiliser ss. Voici les remplacements des autres outils de mise en réseau dans iproute2.

Les commandes obsolètes et leurs équivalents iproute2 sont les suivants:

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)

La liste de base est également disponible sur Wikipedia: http://en.wikipedia.org/wiki/Iproute2 .

Références

slm
la source
1

Une autre méthode pour lsofsi vous ne connaissez pas le PID, mais juste le nom du programme:

lsof -Pa -p $(pgrep [programName]) -i
cryptoboy
la source
ne fonctionne pas avec lsof4,89 sur Ubuntu 16.04
Palik
1
Ce sera le cas si le programme a généré plusieurs processus. Dans ce cas, vous devrez spécifier le PID spécifique lors de l'exécution de la commande lsof que j'ai donnée. pgrep <program name>puis choisissez le PID dont vous avez besoin pour la commande ci-dessus. en remplaçant $(pgrep [programName])par le PID #
cryptoboy
0

Avez-vous essayé, cela fait aussi la même chose

netstat -plnt | grep 27071

Succès

L'Exorciste
la source