Comment savoir quels ports sont écoutés par certains PID?


13

J'ai un PID de certains processus écoutant certains ports sur mon OS X et j'ai besoin de savoir quels ports sont écoutés par ce processus. Comment puis-je le faire?

Je sais que je peux utiliser lsofpour savoir quel processus écoute un port, mais je dois effectuer une opération inverse.

Je vous remercie.

UPD

OS X utilise des utilitaires BSD, donc j'ai BSD et netstatnon Linux netstat. Linux netstata l' -poption pour afficher les PID, BSD netstatutilise -ppour spécifier le port et n'a pas d'option pour afficher les PID.


Voulez-vous dire que vous essayez de trouver les ports sur lesquels un processus écoute? netstatpeut le faire pour vous. Vous pouvez grepsur le PID si vous souhaitez filtrer la sortie denetstat
Centimane

aussi l' lsofutilisation n'est pas seulement un moyen. vous pouvez faire quelque chose comme lsof|grep ${PID}. qui videra grossièrement tout et grepsélectionnera les lignes contenant le PID. Dans le cas contraire, il pourrait répertorier une ligne non pertinente, en raison du nombre PID correspondant à tort à une autre valeur, mais les chances sont minces
MelBurslan

@ Dave, oui, tu me suis bien. Comme je peux le voir, la version BSD de netstatne peut pas afficher les PID.
shau-kote du

@MelBurslan cela ne ressemble pas à une solution soignée. De plus, ce n'est pas rapide - cela prend du temps sur mon MBP.
shau-kote

Réponses:


13

J'ai trouvé une solution par moi-même en lisant en profondeur man lsof. (Oui, RT * M aide toujours.) Merci @Gilles pour avoir visé.

Voici la solution: lsof -aPi -p 555 (555 est le PID).

Explication:

  1. -p pour spécifier le numéro PID;
  2. -i pour afficher uniquement les périphériques réseau;
  3. -a à ET deux conditions ci-dessus (sinon elles seront ORed);
  4. -P pour afficher les numéros de port (au lieu des noms de port par défaut).

De plus, on peut utiliser lsof -aPi4 -p 555ou lsof -aPi6 -p 55pour IPv4 ou IP6 uniquement des adresses en conséquence.

Si la sortie sera analysée par une autre -Fnoption de programme , cela peut être utile. Avec cette option, vous lsofobtiendrez une «sortie pour un autre programme» au lieu d'une belle sortie formatée. lsof -aPi4 -Fn -p 555produira quelque chose comme ceci:

p554
nlocalhost:4321

PS J'ai tout testé sur mon OS X El Capitan, mais comme je peux le voir, cela devrait aussi fonctionner sur Linux.


6

lsoffournit des informations sur les fichiers ouverts par les processus, y compris les ports réseau. Il est disponible sur à peu près tous les systèmes Unix, y compris OSX .

La pierre de Rosette pour Unix ne liste aucun autre outil pour « processus de correspondance dans le fichier ou le port » sur OSX.

Pour répertorier les processus à l'écoute sur un port TCP, vous pouvez utiliser

lsof -iTCP -sTCP:LISTEN

lsof -iUDPrépertorie les processus qui ont un socket UDP ouvert. lsof -irépertorie toutes les sockets réseau ouvertes (clients TCP, serveurs TCP et autres protocoles IP).


0

si vous voulez savoir quel port écoute, vous pouvez utiliser l'option -p de netstat. vous devez être le superutilisateur:

$ sudo netstat -nlp | grep 80
tcp  0  0  0.0.0.0:80  0.0.0.0:*  LISTEN  125004/nginx

si vous voulez en savoir plus, essayez ce lien


Il s'agit de GNU netstat, j'ai OS X et utilise donc BSD netstat. Il utilise -ppour spécifier le port TCP / IP, et il n'a pas la possibilité d'afficher le PID.
shau-kote

0

Sur FreeBSD, vous pouvez utiliser sockstatpour ces informations. Je ne sais pas si OS X en a sockstat, car je n'ai pas de Mac.

Par exemple, pour voir toutes les connexions TCPv4:

sockstat -4


Alack, il n'y a pas de sockstatcommande sur mon Mac. :(
shau-kote

0

Vous pouvez concaténer netstat avec grep, awk et sed pour afficher les ports avec leurs pids correspondants sur Linux et Cygwin:

$ netstat -ano | grep LISTENING | grep -v ‘\[::\]’ | sort -n | uniq -c | awk ‘ {print $3 “\t” $6}’ | sed ‘s/.*://’

Plus de détails

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.