Comment puis-je lister mes ports réseau ouverts avec netstat?

206

Je voudrais lister mes ports réseau ouverts dans Terminal avec des commandes intégrées. Comme ce que je sais, netstatc'est la commande à utiliser. Mais j'ai du mal à obtenir des informations utiles.

Comment puis-je lister mes ports ouverts avec netstat? Des drapeaux spécifiques qui m'aident dans ce cas?

Jonas
la source

Réponses:

310
netstat -ap tcp | grep -i "listen"

Achive Internet connections (including servers)
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)   
tcp4       0      0  localhost.25035        *.*                    LISTEN
sudo lsof -PiTCP -sTCP:LISTEN

COMMAND     PID      USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
GitHub      850 grgarside   6u   IPv4 0x23c345381d089301      0t0  TCP localhost:25035 (LISTEN)
grg
la source
2
Merci! Cependant, la sortie est assez difficile à lire, mais lsofétait un peu mieux, merci.
Jonas
12
Vous devez utiliser sudo lsof .... Sans le sudo, lsof ne peut voir que les processus que vous possédez et ne montrera donc aucun des ports ouverts par les processus du système. En outre, vous pouvez ignorer la commande grep en indiquant à lsof que vous souhaitez uniquement afficher les ports dans l'état LISTEN avec sudo lsof -PiTCP -sTCP:LISTEN.
Gordon Davisson
1
→ grgarside: méfiez-vous des effets de grep -i "listen"vos 2 exemples.
Dan
1
Avec GNU netstat, vous pouvez éventuellement répertorier le pid du processus qui a ouvert chaque port. Y at-il un moyen d’avoir ce comportement avec BSD netstatégalement?
Chris
2
Je viens de le faire, le -vdrapeau allume ça. Le pid sera dans l'avant-dernière colonne.
Chris
64

peut-être que vous pouvez utiliser lsof:

lsof -Pn -i4

-i4 signifie seulement afficher l'adresse ipv4 et les ports -P et -n sortie rapide

sortie comme ça

  lsof -Pn -i4 | grep LISTEN
QQPlatfor 22767 xxxx   15u  IPv4 0x36c2bfa04e49385d      0t0  TCP *:49969 (LISTEN)
GoAgentX  33377 xxxx    4u  IPv4 0x36c2bfa06e68b12d      0t0  TCP *:56154 (LISTEN)
GoAgentX  33377 xxxx   20u  IPv4 0x36c2bfa04e492f8d      0t0  TCP 127.0.0.1:56155 (LISTEN)
Strivescript
la source
2
Que fait cette commande?
nohillside
3
lsofliste les fichiers ouverts. Les sockets réseau sont considérés comme des fichiers. Ainsi, chaque socket réseau ouvert (en écoute ou activement utilisé) sera répertorié dans lsof.
Craig Trader
Il montre également l'identifiant du processus (netstat pas)
lib
1
lsof -Pn -i6pour IPV6
Jared Burrows
2
Au moins ma machine, cette réponse prend 0,1 s, tandis que @ grgarside est de 28 s. La différence réside dans le -i4commutateur, qui consiste à ne regarder que les adresses IPv4.
Davor Cubranic
8

La méthode la plus simple consiste à utiliser netstat:

$ netstat -ap tcp
Active Internet connections (including servers)
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)    
tcp4       0      0  10.0.2.23.58792        17.172.233.109.5223    ESTABLISHED
tcp4      87      0  my_iMac__at_home.55481 stackoverflow.co.http  ESTABLISHED
tcp4     116      0  my_iMac__at_home.55478 stackoverflow.co.http  ESTABLISHED
tcp4      58      0  my_iMac__at_home.63452 stackoverflow.co.http  ESTABLISHED
tcp4      87      0  my_iMac__at_home.63429 stackoverflow.co.http  ESTABLISHED
tcp4       0      0  localhost.63173        localhost.773          ESTABLISHED
tcp4       0      0  localhost.773          localhost.63173        ESTABLISHED
tcp4       0      0  localhost.63173        *.*                    LISTEN     
tcp4       0      0  localhost.63172        *.*                    LISTEN     
tcp4       0      0  localhost.ipp          *.*                    LISTEN     
tcp6       0      0  localhost.ipp          *.*                    LISTEN     

… Sans aucun filtrage supplémentaire, afin d'obtenir les en-têtes corrects, de voir les deux serveurs en écoute et les connexions déjà établies dans les deux sens. Dans cet exemple, la 1ère ligne montre une connexion de mon Mac vers 17.172.233.109un autre:

whois 17.172.233.109

m'a appris qu'il est situé chez Apple.

dan
la source
7

Premièrement, je ne suis pas un expert en BSD, mais comme pour le PO, je voulais l’équivalent approximatif d’exécuter ce qui suit sur une boîte * nix ou quelque chose de proche:

netstat -tulpn

J'ai lu d'autres questions / réponses offrant lsof * et netstat * sur MacOS, et je voulais toujours quelque chose avec une sortie plus compacte. Donc, voici ce que j'ai rapidement mis en place:

netstat -Watnlv | grep LISTEN | awk '{"ps -o comm= -p " $9 | getline procname;colred="\033[01;31m";colclr="\033[0m"; print cred "proto: " colclr $1 colred " | addr.port: " colclr $4 colred " | pid: " colclr $9 colred " | name: " colclr procname;  }' | column -t -s "|"

C'est un peu excessif, alors j'ai ajouté de la couleur à la sortie pour faire bonne mesure. Puisque je ne vais pas pouvoir me souvenir, ni vouloir taper ce monstre. Je le mets dans une fonction bash, puis je l’appelle au besoin. Voici la fonction bash:

macnst (){
    netstat -Watnlv | grep LISTEN | awk '{"ps -o comm= -p " $9 | getline procname;colred="\033[01;31m";colclr="\033[0m"; print colred "proto: " colclr $1 colred " | addr.port: " colclr $4 colred " | pid: " colclr $9 colred " | name: " colclr procname;  }' | column -t -s "|"
}

J'ai une petite collection de ces fonctions pratiques dans un fichier que je tire de ~ / .bash_profile ou ~ / .zshrc. Ceci est ajouté à la collection. Il serait intéressant de voir d’autres possibilités de rendre cela plus agréable / plus mince.

Exemple de sortie:

> macns
proto: tcp4     addr.port: 127.0.0.1.9999     pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp46    addr.port: *.35729            pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp46    addr.port: *.62087            pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp46    addr.port: *.62070            pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp46    addr.port: *.62085            pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp4     addr.port: *.61993            pid: 70043    name:  /Applications/IntelliJ IDEA.app/Contents/MacOS/idea
proto: tcp46    addr.port: *.61992            pid: 70065    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.42329    pid: 70065    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.61983    pid: 70043    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.63342    pid: 70043    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.6942     pid: 70043    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.3075     pid: 67931    name:  /Applications/electerm.app/Contents/Frameworks/electerm Helper.app/Contents/MacOS/electerm Helper
proto: tcp6     addr.port: *.58640            pid: 320      name:  /usr/libexec/rapportd
proto: tcp4     addr.port: *.58640            pid: 320      name:  /usr/libexec/rapportd
proto: tcp4     addr.port: 127.0.0.1.9770     pid: 71       name:  /Applications/Pritunl.app/Contents/Resources/pritunl-service
kroolk
la source
Veuillez ne pas poster de gifs de Terminal bot, collez le texte ici sous forme de code. Il est difficile de copier et de lire si vous avez besoin de grosses polices
user151019
L'image n'est pas un gif, c'est juste un écran montrant la sortie. Si vous cliquez, vous verrez que c'est un PNG. Hébergé sur imgur .. mais c'est ce que StackExchange utilise par défaut, je suppose. Quoi qu'il en soit, si vous cherchez une capture d'écran différente, je peux la saisir à nouveau.
kroolk
OK dans mon commentaire remplace GIF par screenshot, peu importe le format. Le fait est que cela devrait être texte
utilisateur151019
Depuis la suppression de la commande longue de l'exemple de sortie, celle-ci fonctionnerait mieux en tant que capture d'écran, car rien ne doit être copié à partir de celle-ci, et puisqu'elle peut également être rognée mieux qu'auparavant.
Mwfearnley