web-dev-qa-db-fra.com

Comment puis-je vérifier quels ports sont occupés et quels ports sont libres sur ma machine Linux?

Existe-t-il une commande de ligne de commande ou un autre moyen permettant de rechercher et de répertorier les numéros de port libre et occupé sur ma machine Linux?

28
Jeegar Patel

La commande

netstat -antu

montrera tous les ports TCP et UDP utilisés. La sortie ressemblera à ceci:

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:59753           0.0.0.0:*               LISTEN

Le nombre après les deux points dans le champ Adresse locale indique le port utilisé. Si l'état est "LISTEN", cela signifie un port utilisé pour les connexions entrantes. Si l'adresse IP dans le champ Local Address est 0.0.0.0, cela signifie que les connexions entrantes seront acceptées pour toute adresse IP attribuée à une interface. Cela signifie donc des connexions en provenance de l'extérieur de votre ordinateur.

Si elle indiquait localhost ou 127.0.0.1, cela n'accepterait que les connexions de votre machine.

De plus, si vous ajoutez le paramètre -p et l'exécutez en tant que root, le processus qui a ouvert le port sera affiché:

$ Sudo netstat -antup
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:59753           0.0.0.0:*               LISTEN      860/rpc.statd

Tout ce qui n'est pas indiqué comme étant en cours d'utilisation est gratuit. Toutefois, les utilisateurs (comptes non privilégiés) ne peuvent ouvrir que les ports supérieurs à 1023.

41
Paul

J'ai compilé un petite liste moi-même.

Certains de mes favoris sont:

netstat -tulpn
lsof -i -n -P
13
robin

Un moyen efficace de vérifier les ports ouverts consiste à utiliser ss (en remplacement de deprecatednetstat), il est utilisable dans un script sans nécessiter de privilèges élevés (c'est-à-dire Sudo).

Utilisation: option -l pour les ports d'écoute, option -n pour contourner la résolution DNS et le filtre sur le port source NN: src :NN (remplacez NN par le port que vous souhaitez surveiller). Pour plus d'options, voir man ss

ss -ln src :NN

Exemples:

[user@server ~]# ss -ln src :80
State       Recv-Q Send-Q       Local Address:Port   Peer Address:Port
LISTEN      0      128                      *:80                *:*
[user@server ~]# ss -ln src :81
State       Recv-Q Send-Q       Local Address:Port   Peer Address:Port

Et dans un script, en utilisant grep, nous pouvons tester si la sortie contient le port que nous avons demandé. Exemple avec le port 80 utilisé (voir ci-dessus):

myport=80
# count the number of occurrences of port $myport in output: 1= in use; 0 = not in use
result=$(ss -ln src :$myport | grep -Ec -e "\<$myport\>")
if [ "$result" -eq 1 ]; then
  echo "Port $myport is in use (result == $result) "
else
  echo "Port $myport is NOT in use (result == $result) "
fi

# output:
Port 80 is in use (result == 1)

Exemple avec le port 81 non utilisé (voir ci-dessus)

myport=81
result=$(ss -ln src :$myport | grep -Ec -e "\<$myport\>")
if [ "$result" -eq 1 ]; then
  echo "Port $myport is in use (result == $result) "
else
  echo "Port $myport is NOT in use (result == $result) "
fi

# output:
Port 81 is NOT in use (result == 0)
7
Thomas

Autrement:

telnet localhost <PORT_NUMBER>

Si le port est libre, vous obtiendrez une erreur. Si le port est utilisé, telnet se connectera.

(trouvé sur http://www.unix.com/unix-for-dummies-questions-and-answers/8456-how-know-whether-particular-port-number-free-not.html )

3
Algiz