28 votes

Comment puis-je savoir si un port est disponible sur Ubuntu 8.04 ?

Existe-t-il une commande que je puisse exécuter depuis bash qui me dise si un port est déjà ouvert ?

2voto

hazzen Points 7315

Lsof (list open files) est un bon outil pour voir si un processus est à l'écoute sur un port.

lsof -P | grep :<nombre de port>

netstat est un bon outil pour voir s'il y a des connexions actives.

netstat -n | grep :<nombre de port>

2voto

colmmacc Points 173

Vous ne mentionnez pas le protocole que vous voulez utiliser, c'est-à-dire TCP ou UDP - et il est également important de réaliser que "port" n'est pas aussi granulaire que le système le supporte pour désambiguïser les sockets. Par exemple, si votre système possède plusieurs adresses IP, le port 80 peut être utilisé sur toutes les adresses IP (soit l'application s'est liée à "0.0.0.0" ou ": :" ou à chaque adresse IP successivement), soit il peut être utilisé uniquement sur un sous-ensemble de ces adresses IP.

Le meilleur moyen, et le plus sûr, de déterminer si un port/adresse est libre et disponible est d'essayer de s'y connecter. Netcat est très pratique pour cela.

nc -l \[-s a.b.c.d\] -p NN

tentera de se lier au port TCP NN sur (optionnel, la valeur par défaut sera toutes les adresses) a.b.c.d. Ajoutez l'option -u pour faire de même en UDP.

Ensuite, pour savoir si le port est vraiment "ouvert" comme vous le demandez, vous devez commencer à examiner les règles potentielles du pare-feu. Encore une fois, la chose la plus simple est d'essayer de se connecter au port. Utilisez netcat comme ci-dessus, sur le serveur, et depuis un client, utilisez netcat pour tenter de vous connecter au port que vous avez ouvert.

nc [-u] a.b.c.d NN

se connectera au port NN sur a.b.c.d, en utilisant UDP si l'option -u est spécifiée. Vous pouvez alors taper une entrée dans l'extrémité client, et elle devrait apparaître sur le serveur. Si ce n'est pas le cas, vous devez vous tourner vers des outils spécifiques au système et au réseau.

0 votes

Cela semble bien, sauf que nc -l continue d'écouter jusqu'à ce qu'il se connecte à un client. Existe-t-il un moyen de renvoyer le succès immédiatement ?

2voto

Oct Points 1556

J'utilise Unité de fusion (dans le paquet psmisc) :

fuser -n tcp PORT

Ramène le pid du processus lié à ce port.

Si c'est pour savoir si un port est en écoute, le bon vieux telnet fait l'affaire :)

telnet 127.0.0.1 PORT

2voto

Josiah Johnston Points 21

Cette ligne unique vous permettra d'obtenir une liste de tous les ports TCP utilisés. Il fonctionne en bash sur Ubuntu et OS X.

netstat -ant | sed -e '/^tcp/ !d' -e 's/^[^ ]* *[^ ]* *[^ ]* *.*[\.:]\([0-9]*\) .*$/\1/' | sort -g | uniq

La liste comportera un port par ligne sans aucune information supplémentaire.

0 votes

J'aime ça ! gret drop in for bash scripts, e.g. : for port in $(netstat -ant | sed -e '/^tcp/ !d' -e 's/^[^ ]* *[^ ]* *[^ ]* *.*[\.:]\([0-9]*\) .*$/\1/' | sort -g | uniq); do echo EXECUTE COMMAND FOR PORT $port; done

0voto

nachonachoman Points 127

De nombreuses façons de faire m'ont posé des problèmes parce qu'elles ne fonctionnaient pas sur linux et osx, et/ou parce qu'elles ne montraient pas les ports utilisés par docker, ou les processus qui appartenaient à root. Maintenant, j'utilise simplement ce programme javascript :

(assurez-vous que vous avez installé node et qu'il fonctionne avec node pas seulement nodejs ou modifier le programme en conséquence)

sauvegarder ce qui suit dans un fichier appelé check-port dans votre chemin ou dans votre projet

#!/usr/bin/env node
var http = require('http');
var app = new http.Server();
app.listen(process.argv[2], () => {
  process.exit(0)
});

définir les permissions

chmod +x path/to/check-port

fuyez votre chemin

check-port 8080

ou exécuté à partir du même répertoire

./check-port 8080

Jusqu'à présent, cela fonctionne plutôt bien.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X