Procurando telnet no RHEL 8? Tente nc

Telnet é um protocolo de rede usado para acessar remotamente um computador e fornece comunicação bidirecional baseada em texto. Portanto, você precisa de um servidor e cliente telnet para conversar entre si.

Telnet é um dos utilitários Linux/Windows populares que há muito cumpre seu propósito.

Um grande problema com o telnet em sistemas modernos é que ele não é seguro. Toda a comunicação em telnet acontece em texto simples e todo o tráfego de rede não é criptografado. Essencialmente, qualquer pessoa com acesso e ferramentas adequados pode bisbilhotar o tráfego da rede para ler esse tráfego. Como tal, a maioria dos sistemas operacionais Linux modernos não vem com o telnet pré-instalado, e outros recomendam não usá-lo.

Com o advento do protocolo SSH ou Secure Shell, que é mais do que um substituto criptografado para o telnet, o uso do telnet para o propósito pretendido está desatualizado há muito tempo. Mas há um uso alternativo do telnet que muitos administradores de sistema e entusiastas de tecnologia ainda usam, que é verificar a conectividade de portas TCP remotas.

Pode-se simplesmente verificar se a porta TCP remota está escutando e respondendo corretamente usando o comando telnet. O snippet abaixo mostra como podemos verificar se o google.com está ativo e funcionando verificando a conectividade HTTP/HTTPS.

$ telnet google.com 80
Trying 142.250.183.206...
Connected to google.com.
Escape character is '^]'.
^]
telnet> quit
Connection closed.

$
$ telnet google.com 443
Trying 142.250.183.206...
Connected to google.com.
Escape character is '^]'.
^]
telnet> quit
Connection closed.
$

Uma porta TCP que não esteja aberta ou acessível se comportará como abaixo quando verificada com telnet:

$ telnet google.com 22
Trying 142.250.193.174...
^C
$

Isso facilita a solução de problemas simples de conectividade de rede em combinação com os comandos ping, traceroute ou tracepath, netstat etc.

Se estiver usando o RHEL 8 (ou versões ainda mais antigas do RHEL/CentOS), você tem a opção de usar nc (ou Ncat ou Network Connector), que oferece suporte a muitas opções relacionadas ao diagnóstico de rede. Discutiremos como instalar e usar esta ferramenta no RHEL8 e sistemas similares.

O que é nc?

nc (ou Ncat) é uma ferramenta de linha de comando de uso geral popular para ler, escrever, redirecionar e criptografar dados em uma rede. Originalmente escrito para o projeto nmap, agora existem várias implementações do Netcat disponíveis. Ele funciona com TCP e UDP em IPv4 e IPv6 e fornece casos de uso potenciais ilimitados.

  Adobe InCopy: custo, recursos e download

Abaixo estão alguns dos principais recursos do utilitário nc:

  • Capacidade de encadear ncats juntos
  • Redirecionamento de portas TCP, UDP e SCTP para outros sites
  • Criptografe a comunicação com suporte SSL
  • Suporte de proxy via SOCK4/5 ou proxies HTTP (incluindo autenticação)
  • Suporta várias plataformas, incluindo Windows, Linux e macOS

Instalando nc

nc está disponível como parte dos repositórios padrão em sistemas RHEL. Para instalá-lo no sistema RHEL 7, basta emitir o comando abaixo no terminal:

$ sudo yum install -y nc

Para o sistema RHEL 8, você pode usar dnf como:

$ sudo dnf install -y nc

Verifique a conectividade TCP

Embora o nc ofereça uma série de recursos que suportam vários casos de uso em aplicativos, um dos mais comuns é durante a solução de problemas de rede no lugar do telnet.

nc pode mostrar se você pode acessar uma porta TCP. Aqui está a sintaxe:

$ nc -vz <IP/DNS> <Port>

Como exemplo, se eu quiser verificar se consigo acessar etechpt.com por http ou https. Posso verificar isso usando nc como mostrado abaixo (a porta 80 é para http enquanto 443 é para https):

$ nc -vz etechpt.com.com 80
Ncat: Version 7.70 ( https://nmap.org/ncat )
Ncat: Connected to 104.26.11.88:80.
Ncat: 0 bytes sent, 0 bytes received in 0.02 seconds.
$
$ nc -vz etechpt.com.com 443
Ncat: Version 7.70 ( https://nmap.org/ncat )
Ncat: Connected to 104.26.10.88:443.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.
$

Da mesma forma, uma porta não alcançável ou bloqueada mostrará uma saída como (vários endereços são verificados como pontos DNS etechpt.com para vários IPs):

$ nc -vz etechpt.com.com 22
Ncat: Version 7.70 ( https://nmap.org/ncat )
Ncat: Connection to 172.67.70.213 failed: Connection timed out.
Ncat: Trying next address...
Ncat: Connection to 104.26.11.88 failed: Connection timed out.
Ncat: Trying next address...
Ncat: Connection to 104.26.10.88 failed: Connection timed out.
Ncat: Trying next address...
Ncat: Connection to 2606:4700:20::681a:a58 failed: Network is unreachable.
Ncat: Trying next address...
Ncat: Connection to 2606:4700:20::681a:b58 failed: Network is unreachable.
Ncat: Trying next address...
Ncat: Network is unreachable.
$
$ dig etechpt.com.com +short
104.26.10.88
172.67.70.213
104.26.11.88
$

Verifique a conectividade UDP

O telnet só pode verificar a comunicação com uma porta TCP remota, enquanto o nc permite verificar a conectividade TCP e UDP.

nc pode simplesmente enviar pacotes UDP em vez de pacotes TCP padrão usando:

$ nc -vzu <IP/DNS> <Port>

Mas o UDP é um protocolo sem sessão, ao contrário do TCP, portanto, você não pode confirmar a conectividade UDP de ponta a ponta em todos os cenários possíveis apenas enviando pacotes UDP em uma extremidade, a menos que o processo de escuta na extremidade remota envie alguma resposta, nc não será capaz de julgar se o pacote enviado chegou ao destino ou não. Mas o nc oferece uma alternativa para determinar a conectividade UDP de ponta a ponta iniciando um ouvinte UDP, supondo que você tenha acesso adequado à CLI no servidor remoto.

  Como limpar um iPhone (apagar o iPhone) antes de vender

Portanto, supondo que você precise verificar a conectividade UDP entre dois hosts Linux para DNS usando nc, uma maneira simples de fazer isso seria iniciar o servidor nc escutando na porta necessária:

$ sudo nc -ul <Port>

Para DNS, precisamos verificar a porta 53 que faria o comando acima como:

$ nc -ul 53

No lado do cliente, você precisaria iniciar outro processo nc que envia pacotes UDP para o servidor:

$ nc -u <IP/DNS> <Port>

O que faria nosso comando:

$ nc -u <IP/DNS> 53

Considerando que nada bloqueie o tráfego UDP para a porta 53 entre essas duas máquinas, o que você digitar e inserir em uma máquina deve ser visível nos outros hosts, como bate-papo bidirecional. Caso contrário, algum firewall está bloqueando a conectividade entre esses dois sistemas.

O modelo de servidor e cliente usando nc funciona perfeitamente para esses tipos de verificações simples de conectividade entre hosts. Como a verificação UDP acima, o nc também pode escutar pacotes TCP em uma determinada porta:

$ sudo nc -l <Port>

No lado do cliente, normalmente você pode enviar pacotes TCP para verificar a conectividade:

$ nc <IP/DNS> <Port>

O método nc servidor/cliente acima não é necessário no caso de conexões TCP (diferente do UDP), pois é um protocolo orientado à conexão e funciona com reconhecimentos. Qualquer processo de escuta trabalhando no TCP responderá diretamente a nc pacotes TCP.

Resumo

Este artigo resume como o utilitário nc funciona como um substituto direto para o telnet em sistemas Linux modernos no que diz respeito à verificação da conectividade da porta e fornece muito mais poder ao usuário final para diagnosticar e resolver problemas de rede.

A ajuda do nc pode ser acessada usando o comando nc -h:

$ nc -h
Ncat 7.70 ( https://nmap.org/ncat )
Usage: ncat [options] [hostname] [port]

Options taking a time assume seconds. Append 'ms' for milliseconds,
's' for seconds, 'm' for minutes, or 'h' for hours (e.g. 500ms).
  -4                         Use IPv4 only
  -6                         Use IPv6 only
  -U, --unixsock             Use Unix domain sockets only
  -C, --crlf                 Use CRLF for EOL sequence
  -c, --sh-exec <command>    Executes the given command via /bin/sh
  -e, --exec <command>       Executes the given command
      --lua-exec <filename>  Executes the given Lua script
  -g hop1[,hop2,...]         Loose source routing hop points (8 max)
  -G <n>                     Loose source routing hop pointer (4, 8, 12, ...)
  -m, --max-conns <n>        Maximum <n> simultaneous connections
  -h, --help                 Display this help screen
  -d, --delay <time>         Wait between read/writes
  -o, --output <filename>    Dump session data to a file
  -x, --hex-dump <filename>  Dump session data as hex to a file
  -i, --idle-timeout <time>  Idle read/write timeout
  -p, --source-port port     Specify source port to use
  -s, --source addr          Specify source address to use (doesn't affect -l)
  -l, --listen               Bind and listen for incoming connections
  -k, --keep-open            Accept multiple connections in listen mode
  -n, --nodns                Do not resolve hostnames via DNS
  -t, --telnet               Answer Telnet negotiations
  -u, --udp                  Use UDP instead of default TCP
      --sctp                 Use SCTP instead of default TCP
  -v, --verbose              Set verbosity level (can be used several times)
  -w, --wait <time>          Connect timeout
  -z                         Zero-I/O mode, report connection status only
      --append-output        Append rather than clobber specified output files
      --send-only            Only send data, ignoring received; quit on EOF
      --recv-only            Only receive data, never send anything
      --allow                Allow only given hosts to connect to Ncat
      --allowfile            A file of hosts allowed to connect to Ncat
      --deny                 Deny given hosts from connecting to Ncat
      --denyfile             A file of hosts denied from connecting to Ncat
      --broker               Enable Ncat's connection brokering mode
      --chat                 Start a simple Ncat chat server
      --proxy <addr[:port]>  Specify address of host to proxy through
      --proxy-type <type>    Specify proxy type ("http" or "socks4" or "socks5")
      --proxy-auth <auth>    Authenticate with HTTP or SOCKS proxy server
      --ssl                  Connect or listen with SSL
      --ssl-cert             Specify SSL certificate file (PEM) for listening
      --ssl-key              Specify SSL private key (PEM) for listening
      --ssl-verify           Verify trust and domain name of certificates
      --ssl-trustfile        PEM file containing trusted SSL certificates
      --ssl-ciphers          Cipherlist containing SSL ciphers to use
      --ssl-alpn             ALPN protocol list to use.
      --version              Display Ncat's version information and exit

See the ncat(1) manpage for full options, descriptions and usage examples
$

Para informações mais detalhadas sobre o comando nc, consulte sua página de manual.

$ man nc