web-dev-qa-db-fra.com

Obtenir une liste des ports ouverts sous Linux

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?

178
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 programme

Vous 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.

246
mehulved

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
81
Eric Finn

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.

20
askmish

Tous les ports ouverts, y compris le trafic de réponse:

netstat -tuwanp 2>/dev/null | awk '{print $4}' | sort | uniq -c | wc -l
5
diyism

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).

1
joat

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.

0
Robokishan

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
0
datashaman