web-dev-qa-db-fra.com

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

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 accompagnée du nmap-ncat version de Netcat et n'a pas installé NMap. Nous ne pouvons rien installer sur les machines.

Auparavant, nous utilisions le GNU Netcat qui a le -z option pour 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 la même vérification avec le nouveau ncat qui n'a pas le -z option sur un système où je ne peux pas installer nmap?

17
λ Jonas Gorauskas

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 entier ou un nom de service, Bash tente d'ouvrir le socket TCP TCP correspondant).

/dev/udp/Host/port Si l'hôte est un nom d'hôte ou une adresse Internet valide et que le 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.

16
HBruijn

Bien que Ncat ne supporte pas encore -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 le -w option.

EDIT: Ncat 7.25BETA2 a introduit le -z option qui fonctionne comme avec GNU netcat, mais uniquement sur des ports simples. Si vous devez analyser des plages de ports, vous devez utiliser Nmap.

9
bonsaiviking

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

Ouvrir le chèque

(>/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
2
AGS