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
?
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.
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.
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