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.
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
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
À 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.
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)
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
nc ou 'netcat' dispose également d'un mode de numérisation qui peut être utile.
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).
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.