Réponses:
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é
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
).
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 -O
target
amap est également un bon choix qui tentera également de deviner le logiciel serveur en saisissant les bannières.
pour commencer, essayez:
amap
target
1-6000
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)
netstat -tlnp
Afficher les t
ports cp qui l
écoutent, afficher n
uniquement les ombres (ne pas résoudre les noms - cela a été plus rapide) et montrer le p
processus qui fait l'écoute (cela p
ne fonctionne que si vous êtes root)
netstat -ulnp
Afficher les u
ports dp qui l
écoutent, afficher n
uniquement les ombres (ne pas résoudre les noms - cela a été plus rapide) et montrer le p
processus qui fait l'écoute (cela p
ne fonctionne que si vous êtes root)
netstat -unp
Afficher les u
ports dp ouverts mais n'écoutant pas, afficher n
uniquement les ombres (ne pas résoudre les noms - cela a été plus rapide) et montrer le p
processus qui fait l'écoute (cela p
ne fonctionne que si vous êtes root)
netstat -an
Afficher tous les a
ports utilisés, afficher n
uniquement 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
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.
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.
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
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 node
non seulement nodejs
ou modifiez le programme en conséquence)
enregistrez 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 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.