Vérifier si l'hôte / port distant est ouvert - Ne peut pas utiliser GNU Netcat ni NMap - RHEL 7

17

Au travail, l'équipe d'infrastructure déploie de nouvelles machines virtuelles avec RHEL7 installé comme système d'exploitation de base. Cette image particulière est livrée avec la nmap-ncatversion de Netcat et n'a pas installé NMap. Nous ne pouvons rien installer sur les machines.

Auparavant, nous utilisions GNU Netcat qui a la -zpossibilité d'analyser un hôte / port distant pour vérifier s'il était ouvert. Quelque chose comme ça:

nc -z -v -w 3 remote.host.name 1234

Comment puis-je réaliser le même contrôle avec le nouveau ncatqui n'a pas l' -zoption sur un système où je ne peux pas installer nmap?

λ Jonas Gorauskas
la source
1
Pourquoi vérifiez-vous si un port est ouvert / fermé? Cela fait-il partie d'une solution de surveillance?
ewwhite
1
Nous travaillons à entrer -zdans Ncat, mais il ne sera pas dans Red Hat pendant un certain temps, je suis sûr: github.com/nmap/nmap/pull/444
bonsaiviking
@ewwhite Je dois vérifier si les ACL du réseau sont ouvertes entre le point A et le point B. Par exemple: le serveur d'application peut-il parler TCP au serveur DB sur le port 1521.
λ Jonas Gorauskas

Réponses:

16

Bash vous permet de vous connecter aux ports TCP et / ou UDP en redirigeant vers des fichiers spéciaux:

/dev/tcp/host/port Si host est un nom d'hôte ou une adresse Internet valide et que port est un numéro de port ou un nom de service entier, Bash tente d'ouvrir le socket TCP correspondant.

/dev/udp/host/port Si host est un nom d'hôte ou une adresse Internet valide et que port est un numéro de port entier ou un nom de service, Bash tente d'ouvrir le socket UDP correspondant.

Un échec d'ouverture ou de création d'un fichier entraîne l'échec de la redirection.

Donc, pour tester si vous pouvez vous connecter au port 80 sur www.example.com, les éléments suivants devraient fonctionner:

echo -n > /dev/tcp/www.example.com/80

Si le port est bloqué, vous obtenez un message "connexion refusée" ou un délai d'expiration.

HBruijn
la source
1
Vous pouvez également vous connecter au port par telnet
Ryan Babchishin
Oui, mais une installation minimale dans RHEL 7 n'inclut pas le RPM telnet où bash est toujours présent.
HBruijn
2
Vraiment? Comment les choses ont changé.
Ryan Babchishin
1
@RyanBabchishin, ainsi que de nombreuses directives de sécurité, nécessitent la suppression du client telnet car il n'est pas sûr de l'utiliser pour se connecter à autre chose; ignorant ses vastes utilisations de dépannage.
Jason Martin
@JasonMartin Pfft
Ryan Babchishin
9

Bien que Ncat ne prenne pas encore en charge -z, vous pouvez obtenir le même comportement avec la redirection shell:

$ ncat google.com 80 </dev/null >/dev/null && echo "yes"
yes
$ ncat google.com 81 </dev/null >/dev/null && echo "yes"
Ncat: Connection timed out.
$ ncat scanme.nmap.org 1234 </dev/null >/dev/null && echo "yes"
Ncat: Connection refused.

Le délai de connexion peut être ajusté avec l' -woption.

EDIT: Ncat 7.25BETA2 a introduit l' -zoption qui fonctionne comme avec GNU netcat, mais uniquement sur des ports uniques. Si vous devez analyser des plages de ports, vous devez utiliser Nmap.

bonsaiviking
la source
2

Ni netcat, telnet ni nmap ne sont nécessaires. Bash est plus simple, portable et plus efficace.

Chèque ouvert

(>/dev/tcp/example.com/80) &>/dev/null && echo "Open" 

Contrôle ouvert / fermé

(>/dev/tcp/example.com/80) &>/dev/null && echo "Open" || echo "Closed"

Vérification de la plage de ports

for i in $(seq 80 88); do (>/dev/tcp/example.com/80/$i) &>/dev/null && echo $i Open|| echo $i Closed; done
AGS
la source