Comment savoir si un port est disponible sur Ubuntu 8.04?

28

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

Codebeef
la source

Réponses:

37

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 / named     
tcp 0 0 xxx.xxx.xxx.xxx:53 0.0.0.0:* ECOUTER 16297 / nommé     
tcp 0 0 xxx.xxx.xxx.xxx:53 0.0.0.0:* ECOUTER 16297 / nommé     
tcp 0 0127.0.0.1:53 0.0.0.0:* ECOUTER 16297 / nommé     
chenille
la source
2
"netstat -antp | grep 80" où 80 est le numéro de port à rechercher.
Umair A.
13

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' LISTENétat AND ( -a) appartenant à l'utilisateur Apache ( www-data).

Xerxès
la source
8

Toutes les bonnes réponses.

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

Sinon, 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

Matthieu
la source
7

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)
Dave Cheney
la source
4
netstat -tlnp  

Afficher les tports cp qui lécoutent, afficher nuniquement les ombres (ne pas résoudre les noms - cela a été plus rapide) et montrer le pprocessus qui fait l'écoute (cela pne fonctionne que si vous êtes root)

netstat -ulnp  

Afficher les uports dp qui lécoutent, afficher nuniquement les ombres (ne pas résoudre les noms - cela a été plus rapide) et montrer le pprocessus qui fait l'écoute (cela pne fonctionne que si vous êtes root)

netstat -unp  

Afficher les uports dp ouverts mais n'écoutant pas, afficher nuniquement les ombres (ne pas résoudre les noms - cela a été plus rapide) et montrer le pprocessus qui fait l'écoute (cela pne fonctionne que si vous êtes root)

netstat -an

Afficher tous les aports utilisés, afficher nuniquement les ombres - 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 tcp@0.0.0.0: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

Jason Tan
la source
2

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>

Jamie
la source
2

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. Par exemple, si votre système a 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 utiliser 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 abcd] -p NN

tentera de se lier au port TCP NN sur (facultatif, la valeur par défaut sera toutes les adresses) abcd 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] abcd NN

se connectera au port NN sur abcd, 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.

colmmacc
la source
2

J'utilise un 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

oct
la source
2

Ce one-liner vous obtiendra 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.

Josiah Johnston
la source
Aimer! gret drop in pour les scripts bash, par exemple: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
Grzegorz Wierzowiecki
0

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 qui appartenaient à root. Maintenant, j'utilise simplement ce programme javascript:

(assurez-vous que le nœud est installé et qu'il fonctionne nodenon seulement nodejsou modifiez le programme en conséquence)

enregistrez ce qui suit dans un fichier appelé check-portdans 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.

Alex028502
la source