Cerchi telnet su RHEL 8? Prova nc
Pubblicato: 2022-05-02Telnet è un protocollo di rete utilizzato per accedere in remoto a un computer e fornisce comunicazioni bidirezionali basate su testo. Quindi hai bisogno di un server telnet e di un client per parlare tra loro.
Telnet è una delle popolari utility Linux/Windows che ha servito a lungo il suo scopo.
Un grosso problema con telnet sui sistemi moderni è che non è sicuro. Tutte le comunicazioni in telnet avvengono in testo normale e tutto il traffico di rete non è crittografato. In sostanza, chiunque abbia accesso e strumenti adeguati può spiare il traffico di rete per leggere questo traffico. Pertanto, la maggior parte dei moderni sistemi operativi Linux non viene fornita con telnet preinstallato e altri ne sconsigliano l'uso.
Con l'avvento del protocollo SSH o Secure Shell, che è più di un sostituto crittografato di telnet, l'uso di telnet per lo scopo previsto è da tempo obsoleto. Ma c'è un uso alternativo di telnet che usano ancora molti amministratori di sistema e appassionati di tecnologia, che consiste nel controllare la connettività delle porte TCP remote.
Si può semplicemente verificare se la porta TCP remota è in ascolto e risponde correttamente utilizzando il comando telnet. Il frammento di codice seguente mostra come possiamo verificare se google.com
è attivo e funzionante controllando la connettività 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. $
Una porta TCP che non è aperta o accessibile si comporterà come di seguito quando controllata con telnet
:
$ telnet google.com 22 Trying 142.250.193.174... ^C $
Ciò semplifica la risoluzione dei problemi di connettività di rete semplice in combinazione con i comandi ping
, traceroute
o tracepath
, netstat
ecc.
Se stai utilizzando RHEL 8 (o anche versioni precedenti di RHEL/CentOS), hai la possibilità di utilizzare nc (o Ncat o Network Connector), che supporta molte opzioni relative alla diagnostica di rete. Discuteremo come installare e utilizzare questo strumento su RHEL8 e sistemi simili.
Cos'è nc?
nc (o Ncat) è un popolare strumento da riga di comando generico per leggere, scrivere, reindirizzare e crittografare i dati su una rete. Originariamente scritto per il progetto nmap
, ora sono disponibili più implementazioni Netcat. Funziona con TCP e UDP su IPv4 e IPv6 e fornisce potenziali casi d'uso illimitati.
Di seguito sono elencate alcune delle principali funzionalità dell'utilità nc
:
- Capacità di incatenare i
ncats
insieme - Reindirizzamento di porte TCP, UDP e SCTP ad altri siti
- Crittografa la comunicazione con il supporto SSL
- Supporto proxy tramite SOCK4/5 o proxy HTTP (inclusa l'autenticazione)
- Supporta più piattaforme, inclusi Windows, Linux e macOS
Installazione nc
nc
è disponibile come parte dei repository predefiniti nei sistemi RHEL. Per installarlo sul sistema RHEL 7, emettere semplicemente il comando seguente sul terminale:
$ sudo yum install -y nc
Per il sistema RHEL 8, puoi usare dnf
come:
$ sudo dnf install -y nc
Controlla la connettività TCP
Sebbene nc
offra una serie di funzionalità che supportano una serie di casi d'uso tra le applicazioni, uno dei più comuni è durante la risoluzione dei problemi di rete al posto di telnet
.
nc
può mostrare se puoi raggiungere una porta TCP. Ecco la sintassi:
$ nc -vz <IP/DNS> <Port>
Ad esempio, se voglio verificare se riesco a raggiungere Geekflare su http
o https
. Posso verificarlo usando nc
come mostrato di seguito (la porta 80
è per http
mentre 443
è per https
):
$ nc -vz geekflare.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 geekflare.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. $
Allo stesso modo, una porta non raggiungibile o bloccata mostrerà un output come (più indirizzi vengono controllati poiché Geekflare DNS punta a più IP):
$ nc -vz geekflare.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 geekflare.com +short 104.26.10.88 172.67.70.213 104.26.11.88 $
Controlla la connettività UDP
telnet
può controllare solo la comunicazione con una porta TCP remota mentre nc
consente di controllare la connettività TCP e UDP.
nc
può semplicemente inviare pacchetti UDP invece di quelli TCP predefiniti usando:
$ nc -vzu <IP/DNS> <Port>
Ma UDP è un protocollo senza sessione, a differenza del TCP, quindi, in quanto tale, non è possibile confermare la connettività UDP end-to-end su tutti i possibili scenari semplicemente inviando pacchetti UDP su un'estremità, a meno che il processo di ascolto sull'estremità remota non invii qualche risposta, nc
non sarà in grado di giudicare se il pacchetto inviato ha raggiunto la destinazione o meno. Ma nc
offre un'alternativa per determinare la connettività UDP end-to-end avviando un listener UDP, supponendo che tu abbia accesso adeguato alla CLI sul server remoto.

Quindi, supponendo che tu debba controllare la connettività UDP tra due host Linux per DNS usando nc
, un modo semplice per farlo sarebbe avviare il server nc
in ascolto sulla porta richiesta:
$ sudo nc -ul <Port>
Per il DNS, dobbiamo controllare la porta 53
che renderebbe il comando precedente come:
$ nc -ul 53
Sul lato client, dovresti avviare un altro processo nc
che invii pacchetti UDP al server:
$ nc -u <IP/DNS> <Port>
Il che renderebbe il nostro comando:
$ nc -u <IP/DNS> 53
Considerando che nulla blocca il traffico UDP per la porta 53
tra queste due macchine, qualunque cosa digiti e immetti su una macchina dovrebbe essere visibile sugli altri host come la chat bidirezionale. In caso contrario, alcuni firewall stanno bloccando la connettività tra questi due sistemi.
Il modello di server e client che utilizza nc
funziona perfettamente per questi tipi di semplici controlli di connettività tra host. Come il controllo UDP sopra, nc
può anche ascoltare i pacchetti TCP su una determinata porta:
$ sudo nc -l <Port>
Sul lato client, puoi normalmente inviare pacchetti TCP per verificare la connettività:
$ nc <IP/DNS> <Port>
Il metodo nc
server/client sopra non è richiesto nel caso di connessioni TCP (a differenza di UDP) poiché è un protocollo orientato alla connessione e funziona con riconoscimenti. Qualsiasi processo di ascolto che lavora su TCP risponderà direttamente ai pacchetti nc
TCP.
Riepilogo
Questo articolo riassume come l'utilità nc
rappresenti un sostituto diretto di telnet
nei moderni sistemi Linux per quanto riguarda il controllo della connettività delle porte e fornisce molta più potenza all'utente finale nella diagnosi e nella risoluzione dei problemi di rete.
È possibile accedere alla guida di nc
utilizzando il 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 (eg 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 $
Per informazioni più dettagliate sul comando nc
, fare riferimento alla sua pagina di manuale.
$ man nc