web-dev-qa-db-fra.com

Comment savoir si un port est disponible sur Ubuntu 8.04?

Existe-t-il une commande que je peux exécuter à partir de bash qui me dira si un port est déjà ouvert?

28
Codebeef

Utilisez "netstat" pour vérifier les ports utilisant actuellement.

netstat -antp 
 
 Proto Recv-Q Send-Q Adresse locale État de l'adresse étrangère PID/Nom du programme 
 tcp 0 0 xxx.xxx.xxx.xxx 0.0.0.0:* LISTEN 16297/nommé 
 Tcp 0 0 xxx.xxx.xxx.xxx:53 0.0.0.0:* ÉCOUTER 16297/nommé 
 Tcp 0 0 xxx.xxx.xxx.xxx:53 0.0.0.0: * ÉCOUTER 16297/nommé 
 Tcp 0 0127.0.0.1:53 0.0.0.0:* ÉCOUTER 16297/nommé 
37
Caterpillar

Ceci (netstat) est la solution la plus rapide ...

netstat -lnt

... mais cela vous donne plus de contrôle (au détriment de la vitesse (parfois beaucoup de vitesse)) ...

lsof -n -i -a -u www-data

L'exemple ci-dessus, par exemple, vous montre tous les ports TCP ouverts et à l'état LISTEN, ET (-a) appartenant à l'Apache (www-data) utilisateur.

13
Xerxes

Toutes les bonnes réponses.

Cependant, vous ne mentionnez pas si vous êtes connecté à l'ordinateur en question. ; P

Sinon, alors nmap est votre ami.

pour commencer, essayez:

nmap -Otarget

amap est également un bon choix qui tentera également de deviner le logiciel serveur en saisissant les bannières.

pour commencer, essayez:

amaptarget1-6000

8
Matthew

Essayer

lsof -i :<port number>

Si vous obtenez des résultats, quelque chose est à l'écoute et lié, par exemple

# lsof -i :80
COMMAND   PID   USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
nginx    1833 nobody    3u  IPv4 51091229      0t0  TCP odessa.cheney.net:http->79.173.188.214:52918 (ESTABLISHED)
nginx    1833 nobody    5u  IPv4 46221856      0t0  TCP odessa.cheney.net:http->66.36.243.182:37876 (CLOSE_WAIT)
nginx    1833 nobody    9u  IPv4 34733048      0t0  TCP localhost.localdomain:http (LISTEN)
nginx    1833 nobody   10u  IPv4 34733049      0t0  TCP odessa.cheney.net:http (LISTEN)
nginx    1833 nobody   14u  IPv4 46221857      0t0  TCP odessa.cheney.net:http->66.36.243.182:37880 (CLOSE_WAIT)
nginx    1833 nobody   15u  IPv4 51091030      0t0  TCP odessa.cheney.net:http->msnbot-65-55-106-132.search.msn.com:51708 (ESTABLISHED)
nginx   11832   root    9u  IPv4 34733048      0t0  TCP localhost.localdomain:http (LISTEN)
nginx   11832   root   10u  IPv4 34733049      0t0  TCP odessa.cheney.net:http (LISTEN)
7
Dave Cheney
netstat -tlnp  

Afficher les ports cp t qui sont à l'écoute de l, afficher uniquement les umbres n (ne pas résoudre les noms - cela a été plus rapide) et afficher le processus p qui fait l'écoute (le p ne fonctionne que si vous êtes root)

netstat -ulnp  

Afficher les ports dp u qui sont à l'écoute de l, afficher uniquement les umbres n (ne pas résoudre les noms - cela a été plus rapide) et afficher le processus p qui fait l'écoute (le p ne fonctionne que si vous êtes root)

netstat -unp  

Afficher les ports dp u qui sont ouverts mais qui n'écoutent pas, afficher uniquement les ombères n (ne pas résoudre les noms - cela a été plus rapide) et montrer le processus p qui est en train de faire l'écoute (le p ne fonctionne que si vous êtes root)

netstat -an

Afficher a ll ports en cours d'utilisation, afficher uniquement les $ n - ne pas résoudre les noms

lsof -i <proto>@<Host>:<port>

par exemple

lsof -i tcp@localhost:25

pour voir si quelque chose écoute sur le port localhost 25/TCP, ou

lsof -i [email protected]:636 

pour voir s'il y a des sockets locales ou distantes qui écoutent (local) ou sont connectées à (local ou distant) pour n'importe quel hôte/interface

4
Jason Tan

lsof (liste des fichiers ouverts) est un bon outil pour voir si un processus écoute sur un port

lsof -P | grep: <numéro de port>

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

netstat -n | grep: <numéro de port>

2
Jamie

J'utilise fuser (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 écoute, le bon vieux telnet fait l'affaire :)

telnet 127.0.0.1 PORT

2
Oct

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

La meilleure et la plus sûre façon de déterminer si un port/une adresse est libre et disponible est d'essayer de s'y connecter. Netcat est pratique pour cela.

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

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

Ensuite, pour savoir si le port est vraiment "ouvert" comme vous le demandez - vous devez commencer à examiner les règles de pare-feu potentielles. 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 à partir d'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'indicateur -u est spécifié. Vous pouvez ensuite taper l'entrée dans l'extrémité client, et elle devrait apparaître sur le serveur. Si ce n'est pas le cas, vous devez examiner les outils spécifiques au système et au réseau.

2
colmmacc

Ce one-liner vous donnera 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 aura un port par ligne sans aucune information supplémentaire.

2
Josiah Johnston

De nombreuses façons de le faire m'ont donné des problèmes parce qu'ils ne fonctionnaient pas sur Linux et OSX, et/ou parce qu'ils ne montraient pas les ports utilisés par Docker, ou les processus appartenant à root. Maintenant, j'utilise simplement ce programme javascript:

(assurez-vous que le nœud est installé et qu'il fonctionne avec node et pas seulement nodejs ou modifiez le programme en conséquence)

enregistrez les éléments suivants 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 autorisations

chmod +x path/to/check-port

fuyez votre chemin

check-port 8080

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

./check-port 8080

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

0
Alex028502