Verifique se o host / porta remota está aberto - Não é possível usar o GNU Netcat nem o NMap - RHEL 7

17

No trabalho, a equipe de infraestrutura está lançando novas VMs com o RHEL7 instalado como o sistema operacional base. Essa imagem específica é fornecida com a nmap-ncatversão do Netcat e não possui o NMap instalado. Não podemos instalar nada nas máquinas.

Anteriormente, estávamos usando o GNU Netcat, que tem a -zopção de verificar um host / porta remoto para verificar se ele estava aberto. Algo assim:

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

Como posso realizar a mesma verificação com o novo ncatque não tem a -zopção em um sistema em que não consigo instalar nmap?

λ Jonas Gorauskas
fonte
1
Por que você está verificando se uma porta está aberta / fechada? Isso faz parte de uma solução de monitoramento?
ewwhite
1
Estamos trabalhando para conseguir -zem NCAT, mas não estará em Red Hat por um tempo, eu tenho certeza: github.com/nmap/nmap/pull/444
bonsaiviking
@ewwhite Eu tenho que verificar se as ACLs da rede estão abertas entre o ponto A e o ponto B. Por exemplo: o servidor de aplicativos pode falar TCP com o servidor DB na porta 1521.
λ Jonas Gorauskas

Respostas:

16

O Bash permite conectar-se às portas TCP e / ou UDP, redirecionando para arquivos especiais:

/dev/tcp/host/port Se host for um nome de host ou endereço da Internet válido e porta for um número de porta inteiro ou nome de serviço, o Bash tentará abrir o soquete TCP correspondente.

/dev/udp/host/port Se host for um nome de host ou endereço da Internet válido e porta for um número de porta inteiro ou nome de serviço, o Bash tentará abrir o soquete UDP correspondente.

Uma falha ao abrir ou criar um arquivo causa falha no redirecionamento.

Portanto, para testar se você pode conectar-se à porta 80 em www.example.com, o seguinte deve funcionar:

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

Se a porta estiver bloqueada, você recebe uma mensagem "conexão recusada" ou um tempo limite.

HBruijn
fonte
1
Você pode telnet para a porta também
Ryan Babchishin
Sim, mas uma instalação mínima no RHEL 7 não inclui o RPM do telnet onde o bash está sempre presente.
21716 HBruijn 8:10
2
Verdade? Como as coisas mudaram.
21816 Ryan Babchishin
1
O @RyanBabchishin, além de muitas diretrizes de segurança, requer a remoção do cliente de telnet, com base no fato de que usá-lo para fazer login em outra coisa é inseguro; ignorando seus vastos usos de solução de problemas.
Jason Martin
@JasonMartin Pfft
Ryan Babchishin
9

Embora o Ncat ainda não suporte -z, você pode obter o mesmo comportamento com o redirecionamento de 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.

O tempo limite de conexão pode ser ajustado com a -wopção

EDIT: O Ncat 7.25BETA2 introduziu a -zopção que funciona como no GNU netcat, mas apenas em portas únicas. Se você precisar verificar os intervalos de portas, deve usar o Nmap.

bonsaiviking
fonte
2

Nem netcat, telnet nem nmap são necessários. O Bash é mais simples, portátil e mais eficiente.

Cheque aberto

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

Cheque aberto / fechado

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

Verificação do intervalo de portas

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