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?


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.


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.