Căutați telnet pe RHEL 8? Încearcă nc

Publicat: 2022-05-02

Telnet este un protocol de rețea folosit pentru a accesa de la distanță un computer și oferă comunicații bidirecționale bazate pe text. Deci, aveți nevoie de un server și un client telnet pentru a vorbi unul cu celălalt.

Telnet este unul dintre popularele utilitare Linux/Windows care și-a îndeplinit de mult scopul.

O problemă majoră cu telnetul pe sistemele moderne este că nu este sigur. Toate comunicările din telnet au loc în text simplu și tot traficul de rețea este necriptat. În esență, oricine are acces și instrumente adecvate poate snoope traficul de rețea pentru a citi acest trafic. Ca atare, majoritatea sistemelor de operare Linux moderne nu vin cu telnet preinstalat, iar alții recomandă să nu-l folosească.

Odată cu apariția protocolului SSH sau Secure Shell, care este mai mult decât un înlocuitor criptat pentru telnet, utilizarea telnetului în scopul propus a fost de mult depășită. Dar există o utilizare alternativă a telnetului pe care mulți administratori de sistem și pasionați de tehnologie o folosesc în continuare, și anume pentru a verifica conectivitatea porturilor TCP la distanță.

Se poate verifica pur și simplu dacă portul TCP la distanță ascultă și răspunde corect folosind comanda telnet. Fragmentul de mai jos arată cum putem verifica dacă google.com este activ și funcționează verificând conectivitatea 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. $

Un port TCP care nu este deschis sau accesibil se va comporta ca mai jos atunci când este verificat cu telnet :

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

Acest lucru facilitează depanarea problemelor simple de conectivitate la rețea în combinație cu comenzile ping , traceroute sau tracepath , netstat etc.

Dacă utilizați RHEL 8 (sau chiar versiuni mai vechi de RHEL/CentOS), aveți opțiunea de a utiliza nc (sau Ncat sau Network Connector), care acceptă multe opțiuni de diagnosticare a rețelei. Vom discuta despre cum să instalați și să utilizați acest instrument pe RHEL8 și sisteme similare.

Ce este nc?

nc (sau Ncat) este un instrument popular de linie de comandă de uz general pentru citirea, scrierea, redirecționarea și criptarea datelor într-o rețea. Scris inițial pentru proiectul nmap , acum există mai multe implementări Netcat disponibile. Funcționează atât cu TCP, cât și cu UDP pe IPv4 și IPv6 și oferă cazuri de utilizare potențiale nelimitate.

Mai jos sunt câteva dintre caracteristicile majore ale utilitarului nc :

  • Abilitatea de a înlănțui ncats -urile împreună
  • Redirecționarea porturilor TCP, UDP și SCTP către alte site-uri
  • Criptați comunicarea cu suport SSL
  • Suport proxy prin SOCK4/5 sau proxy HTTP (inclusiv autentificare)
  • Suportă mai multe platforme, inclusiv Windows, Linux și macOS

Instalarea nc

nc este disponibil ca parte a depozitelor implicite din sistemele RHEL. Pentru a-l instala pe sistemul RHEL 7, pur și simplu lansați comanda de mai jos pe terminal:

 $ sudo yum install -y nc

Pentru sistemul RHEL 8, puteți utiliza dnf ca:

 $ sudo dnf install -y nc

Verificați conectivitatea TCP

Deși nc oferă o serie de funcții care acceptă o serie de cazuri de utilizare în cadrul aplicațiilor, una dintre cele obișnuite este în timpul depanării rețelei în locul telnet .

nc poate arăta dacă puteți ajunge la un port TCP. Iată sintaxa:

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

De exemplu, dacă vreau să verific dacă pot accesa Geekflare prin http sau https . Pot verifica că folosind nc așa cum se arată mai jos (portul 80 este pentru http , în timp ce 443 este pentru 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. $

În mod similar, un port inaccesibil sau blocat va afișa o ieșire ca (mai multe adrese sunt verificate deoarece Geekflare DNS indică mai multe adrese 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 $

Verificați conectivitatea UDP

telnet poate verifica doar comunicarea cu un port TCP la distanță, în timp ce nc vă permite să verificați conectivitatea TCP și UDP.

nc poate trimite pur și simplu pachete UDP în loc de cele implicite TCP folosind:

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

Dar UDP este un protocol fără sesiune, spre deosebire de TCP, deci, ca atare, nu puteți confirma conectivitatea UDP end-to-end în toate scenariile posibile doar trimițând pachete UDP la un capăt, cu excepția cazului în care procesul de ascultare la capătul de la distanță trimite un răspuns, nc nu va putea judeca dacă pachetul trimis a ajuns la destinație sau nu. Dar nc oferă o alternativă pentru a determina conectivitatea UDP de la capăt la capăt prin lansarea unui ascultător UDP, presupunând că aveți acces adecvat la CLI pe serverul de la distanță.

Deci, presupunând că trebuie să verificați conectivitatea UDP între două gazde Linux pentru DNS folosind nc , o modalitate simplă de a face acest lucru ar fi să lansați serverul nc care ascultă pe portul necesar:

 $ sudo nc -ul <Port>

Pentru DNS, trebuie să verificăm portul 53 , care ar face comanda de mai sus ca:

 $ nc -ul 53

La capătul clientului, ar trebui să lansați un alt proces nc care trimite pachete UDP către server:

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

Ceea ce ar face comanda noastră:

 $ nc -u <IP/DNS> 53

Având în vedere că nimic nu blochează traficul UDP pentru portul 53 dintre aceste două mașini, orice tastați și introduceți pe o mașină ar trebui să fie vizibil pe celelalte gazde, ca un chat bidirecțional. Dacă nu, un firewall blochează conectivitatea dintre aceste două sisteme.

Modelul de server și client care utilizează nc funcționează impecabil pentru aceste tipuri de verificări simple de conectivitate între gazde. La fel ca verificarea UDP de mai sus, nc poate asculta și pachetele TCP pe un anumit port:

 $ sudo nc -l <Port>

În partea clientului, în mod normal puteți trimite pachete TCP pentru a verifica conectivitatea:

 $ nc <IP/DNS> <Port>

Metoda server/client nc de mai sus nu este necesară în cazul conexiunilor TCP (spre deosebire de UDP), deoarece este un protocol orientat spre conexiune și funcționează cu confirmări. Orice proces de ascultare care funcționează pe TCP va răspunde direct la pachetele nc TCP.

rezumat

Acest articol rezumă modul în care utilitarul nc reprezintă un înlocuitor direct pentru telnet în sistemele Linux moderne în ceea ce privește verificarea conectivității porturilor și oferă mult mai multă putere utilizatorului final în diagnosticarea și rezolvarea problemelor de rețea.

Ajutorul nc poate fi accesat folosind comanda 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 $

Pentru informații mai detaliate despre comanda nc , consultați pagina sa de manual.

 $ man nc