La commande
netstat -antu
affichera 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 Local Address
le champ est 0.0.0.0
cela signifie que les connexions entrantes seront acceptées sur n'importe quelle adresse IP attribuée à une interface - donc cela signifie à partir de connexions provenant de l'extérieur de votre machine.
S'il disait localhost
ou 127.0.0.1
il n'accepterait que les connexions de votre machine.
De plus, si vous ajoutez le -p
et exécutez-le en tant que root, il affichera le processus qui a ouvert le port :
$ 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 utilisé est gratuit, mais les utilisateurs (comptes non privilégiés) ne peuvent ouvrir que des ports supérieurs à 1023.
J'ai compilé une petite liste moi-même.
Certains de mes favoris sont :
netstat -tulpn
lsof -i -n -P
Un bon moyen fiable de vérifier les ports ouverts consiste à utiliser ss
(remplacement du netstat
obsolète ), 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
(remplace NN
par le port que vous souhaitez surveiller). Pour plus d'options, voir man ss
ss -ln src :NN
Exemples :
[[email protected] ~]# ss -ln src :80
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:80 *:*
[[email protected] ~]# 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)