web-dev-qa-db-fra.com

Vérifier l'état d'un port sur l'hôte distant

J'ai besoin d'une ligne de commande pouvant vérifier l'état du port sur un hôte distant. J'ai essayé ping xxx.xxx.xxx.xxx:161 mais il ne reconnaît pas "l'hôte". Je pensais que c'était une "bonne" réponse jusqu'à ce que je fasse la même commande contre un hôte dont le port est ouvert. Il s’agit d’un fichier de commandes sous Windows qui vérifie l’état du port distant, puis exécute une commande utilisant ce port distant à titre d’information, puis la commande de vérification du port distant à nouveau, puis la commande utilisant ce port sur le prochain serveur pour obtenir des informations. , etc. J'ai regardé partout et j'ai pensé que le ping pourrait le faire, mais il doit y avoir différentes versions du ping, je suppose que le serveur sur lequel je travaille ne montre pas cette option.

Juste pour rire, j'ai essayé un vérificateur de port distant basé sur le Web à partir d'un site Web - et les résultats étaient corrects pour le serveur "problème" et le serveur correct. Cependant, je ne peux pas utiliser cela dans un traitement par lots contenant plus de 500 adresses IP de serveur.

Est-ce que je peux faire quelque chose de simple? Mes compétences en Perl sont extrêmement rouillées (utilisez-les ou perdez-les), ne connaissez pas d'autres langues basées sur Windows que le traitement par lots. Unix est ma compétence, mais cela doit être exécuté à partir de Widows Server 2003.

151
Sheila

Vous semblez chercher un scanner de port tel que nmap ou netcat , tous deux disponibles pour Windows, Linux et Mac OS X.

Par exemple, recherchez telnet sur une adresse IP connue:

nmap -A 192.168.0.5/32 -p 23

Par exemple, recherchez les ports ouverts de 20 à 30 sur Host.example.com:

nc -z Host.example.com 20-30
142
Glenn

Dans l'invite de commande, vous pouvez utiliser la commande telnet. Par exemple, pour vous connecter à IP 192.168.10.1 avec le port 80,

telnet 192.168.10.1 80

Pour activer telnet dans Windows 7 et supérieur click . À partir de l'article lié, activez telnet via le panneau de configuration -> programmes et fonctionnalités -> fonctionnalités Windows -> client telnet, ou exécutez-le simplement dans une invite de l'administrateur:

dism /online /Enable-Feature /FeatureName:TelnetClient
120
Naveen Yedugani

À des fins de script, j'ai constaté que la commande curl pouvait le faire, par exemple:

$ curl -s localhost:80 >/dev/null && echo Connected. || echo Fail.
Connected.
$ curl -s localhost:123 >/dev/null && echo Connected. || echo Fail.
Fail.

Il se peut que cela ne fonctionne pas pour tous les services, car curl peut renvoyer des codes d'erreur différents dans certains cas (selon le commentaire), de sorte que l'ajout de la condition suivante pourrait fonctionner de manière fiable:

[ "$(curl -sm5 localhost:8080 >/dev/null; echo $?)" != 7 ] && echo OK || echo FAIL

Remarque: Ajout de -m5 pour définir un délai de connexion maximal de 5 secondes.

Si vous souhaitez également vérifier si l'hôte est valide, vous devez également vérifier le code de sortie 6:

$ curl -m5 foo:123; [ $? != 6 -a $? != 7 ] && echo OK || echo FAIL
curl: (6) Could not resolve Host: foo
FAIL

Pour résoudre le code d'erreur renvoyé, exécutez simplement: curl Host:port, par exemple:

$ curl localhost:80
curl: (7) Failed to connect to localhost port 80: Connection refused

Voir: man curl pour la liste complète des codes de sortie.

25
kenorb

Presse Windows + R tapez cmd et Enter

Dans le type d'invite de commande

telnet "machine name/ip" "port number"

Si le port n'est pas ouvert, ce message affichera:

"Connecting To "machine name"...Could not open connection to the Host, on port "port number":

Sinon, vous serez amené au port ouvert (un écran vide s'affichera)

22
Leo

Utilisez la commande nc,

nc -zv <hostname/ip> <port/port range>

For example,
nc -zv localhost 27017-27019
or
nc -zv localhost 27017

Vous pouvez également utiliser la commande telnet

telnet <ip/Host> port
18
minhas23

nc ou 'netcat' dispose également d'un mode de numérisation qui peut être utile.

4
caskey

Dans Bash, vous pouvez utiliser des fichiers de pseudo-périphériques pouvant ouvrir une connexion TCP au socket associé. La syntaxe est /dev/$tcp_udp/$Host_ip/$port.

Voici un exemple simple pour tester si Memcached est en cours d'exécution:

</dev/tcp/localhost/11211 && echo Port open || echo Port closed

Voici un autre test pour voir si un site Web spécifique est accessible:

$ echo "HEAD / HTTP/1.0" > /dev/tcp/example.com/80 && echo Connection successful.
Connection successful.

Pour plus d'informations, consultez: Advanced Bash-Scripting Guide: chapitre 29. /dev et /proc .

Connexes: Teste si un port sur un système distant est accessible (sans telnet) sur SuperUser.

Pour plus d'exemples, voir: Comment ouvrir un socket TCP/UDP dans un shell bash (article).

2
kenorb

Je pense que vous cherchez Hping ( http://www.hping.org/ ), qui a une version Windows.

"L'interface est inspirée de la commande unix ping (8), mais hping n'est pas seulement capable d'envoyer des requêtes d'écho ICMP. Il supporte TCP, UDP, ICMP ..."

C'est également très utile si vous voulez voir où un port TCP est bloqué le long d'un itinéraire (comme par un pare-feu), où ICMP pourrait ne pas être.

2
Trueblood