Controlla se l'host / la porta remoti sono aperti - Impossibile utilizzare GNU Netcat né NMap - RHEL 7


17

Al lavoro, il team dell'infrastruttura sta implementando nuove macchine virtuali con RHEL7 installato come sistema operativo di base. Questa particolare immagine viene fornita con la nmap-ncatversione di Netcat e non è installato NMap. È vietato installare qualsiasi cosa sulle macchine.

In precedenza, stavamo usando GNU Netcat che ha la -zpossibilità di scansionare un host / porta remoti per verificare se fosse aperto. Qualcosa come questo:

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

Come posso ottenere lo stesso controllo con il nuovo ncatche non ha l' -zopzione su un sistema in cui non riesco a installare nmap?


1
Perché stai verificando se una porta è aperta / chiusa? Fa parte di una soluzione di monitoraggio?
ewwhite,

1
Stiamo lavorando per entrare -zin Ncat, ma non sarà in Red Hat per un po ', ne sono sicuro: github.com/nmap/nmap/pull/444
bonsaiviking

@ewwhite Devo verificare se gli ACL di rete sono aperti tra il punto A e il punto B. Ad esempio: il server delle app può comunicare TCP con il server DB sulla porta 1521.
λ Jonas Gorauskas il

Risposte:


16

Bash ti consente di connetterti alle porte TCP e / o UDP reindirizzando a file speciali:

/dev/tcp/host/port Se host è un nome host o indirizzo Internet valido e port è un numero di porta intero o un nome di servizio, Bash tenta di aprire il socket TCP corrispondente.

/dev/udp/host/port Se host è un nome host o indirizzo Internet valido e port è un numero di porta intero o un nome di servizio, Bash tenta di aprire il socket UDP corrispondente.

Una mancata apertura o creazione di un file causa il reindirizzamento non riesce.

Quindi, per verificare se è possibile connettersi alla porta 80 su www.esempio.com, dovrebbe funzionare quanto segue:

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

Se la porta è bloccata, viene visualizzato un messaggio "connessione rifiutata" o un timeout.


1
Puoi anche
collegarti

Sì, ma un'installazione minima in RHEL 7 non include l'RPM telnet in cui bash è sempre presente.
HBruijn,

2
Veramente? Come sono cambiate le cose.
Ryan Babchishin,

1
@RyanBabchishin e molte linee guida sulla sicurezza richiedono la rimozione del client Telnet sulla base del fatto che utilizzarlo per accedere a qualcos'altro non è sicuro; ignorando i suoi vasti usi per la risoluzione dei problemi.
Jason Martin,

@JasonMartin Pfft
Ryan Babchishin

9

Sebbene Ncat non supporti ancora -z, è possibile ottenere lo stesso comportamento con il reindirizzamento della 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.

Il timeout di connessione può essere regolato con l' -wopzione.

EDIT: Ncat 7.25BETA2 ha introdotto l' -zopzione che funziona come con GNU netcat, ma solo su porte singole. Se è necessario eseguire la scansione degli intervalli di porte, è necessario utilizzare Nmap.


2

Non sono necessari né netcat, telnet né nmap. Bash è più semplice, portatile e più efficiente.

Apri controllo

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

Controllo aperto / chiuso

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

Controllo intervallo porte

for i in $(seq 80 88); do (>/dev/tcp/example.com/80/$i) &>/dev/null && echo $i Open|| echo $i Closed; done
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.