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.
últimas postagens
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.
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.
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