J'ai besoin d'une commande Linux pour répertorier tous les ports ouverts disponibles à utiliser dans une application.
lsof -i TCP| fgrep LISTEN
Ne semble pas aider car les ports qu’il énumère ne sont pas nécessairement gratuits. Comment puis-je lister les ports ouverts libres non utilisés?
netstat -lntu
comme réponse par @askmish vous donnera la liste des services en cours d'exécution sur votre système sur les ports TCP et UDP où
-l
= uniquement les services qui écoutent sur un port-n
= affiche le numéro de port, n'essayez pas de résoudre le nom du service-t
= ports TCP-u
= ports udp-p
= nom du programmeVous n'avez pas besoin du paramètre 'p', vous voulez uniquement savoir quels ports sont libres et non quel programme est exécuté.
Cela montre seulement quels ports de votre système sont utilisés. Cela ne vous dit pas le statut de votre réseau, par exemple. si vous êtes derrière NAT et que vous souhaitez que certains services soient accessibles de l'extérieur. Ou si le pare-feu bloque le port pour les visiteurs extérieurs. Dans ce cas, nmap vient à la rescousse. AVERTISSEMENT: utilisez nmap uniquement sur les réseaux sous votre contrôle. En outre, il existe des règles de pare-feu qui peuvent bloquer les pings nmap; vous devrez donc bifurquer avec des options pour obtenir des résultats corrects.
Puisque net-tools
est obsolète , vous pouvez utiliser la commande ss
au lieu de netstat
si netstat
n'est pas présent sur votre ordinateur:
ss -lntu
devrait fonctionner de la même manière que
netstat -lntu
selon l'aide intégrée:
-n, --numeric don't resolve service names
-l, --listening display listening sockets
-t, --tcp display only TCP sockets
-u, --udp display only UDP sockets
Cette commande listera les ports réseau ouverts et les processus qui les possèdent:
netstat -lnptu
vous pouvez ensuite filtrer les résultats selon vos spécifications exactes.
Vous pouvez également utiliser nmap
pour obtenir des résultats plus détaillés sur les ports.
Tous les ports ouverts, y compris le trafic de réponse:
netstat -tuwanp 2>/dev/null | awk '{print $4}' | sort | uniq -c | wc -l
Ma réponse à la question initiale était qu'il posait une question sur les ports inutilisés, pas sur les ports actuellement connectés aux services. Si tel est le cas, il n'existe aucun moyen spécifique de les répertorier, à part de répertorier les ports utilisés et de supposer que les autres sont inutilisés.
Un point supplémentaire à garder à l'esprit: en tant qu'utilisateur, vous ne pourrez pas ouvrir un port inférieur à 1024 (vous aurez besoin d'autorisations root pour cela).
Essayer
Sudo netstat -plnt | grep -E '(0.0.0.0:|:::|127.0.0.1:|::1:)' | awk 'NR>2{print $7}' | sort -n | uniq
et regarde ça.
La commande suivante fonctionnera sur tous les Unix produisant dans le même format que Ubuntu/Debian - où l’adresse locale est dans la colonne 4 et où la sortie inclut un en-tête de 2 lignes en haut. Si l'un de ces nombres est différent, modifiez la commande awk ci-dessous.
Si vous voulez uniquement IPv4:
netstat -lnt | awk 'NR>2{print $4}' | grep -E '0.0.0.0:' | sed 's/.*://' | sort -n | uniq
Si vous voulez uniquement IPv6:
netstat -lnt | awk 'NR>2{print $4}' | grep -E ':::' | sed 's/.*://' | sort -n | uniq
Si vous voulez les deux ensemble:
netstat -lnt | awk 'NR>2{print $4}' | grep -E '(0.0.0.0:|:::)' | sed 's/.*://' | sort -n | uniq
La commande génère une liste de numéros de port qui écoutent sur toutes les interfaces. Si vous voulez lister tous les ports en écoute sur l'interface localhost, utilisez quelque chose comme ceci:
netstat -lnt | awk 'NR>2{print $4}' | grep -E '(127.0.0.1:|::1:)' | sed 's/.*://' | sort -n | uniq