Letar du efter telnet på RHEL 8? Försök med nc

Telnet är ett nätverksprotokoll som används för att fjärråtkomst till en dator och tillhandahåller tvåvägs textbaserad kommunikation. Så du behöver en telnet-server och klient för att prata med varandra.

Telnet är ett av de populära Linux/Windows-verktygen som länge har tjänat sitt syfte.

Ett stort problem med telnet på moderna system är att det inte är säkert. All kommunikation i telnet sker i vanlig text, och all nätverkstrafik är okrypterad. I princip alla med rätt åtkomst och verktyg kan snoka på nätverkstrafik för att läsa denna trafik. Som sådan kommer de flesta moderna Linux-operativsystem inte med telnet förinstallerat, och andra rekommenderar att man inte använder det.

Med tillkomsten av SSH- eller Secure Shell-protokollet, som är mer än en krypterad ersättning för telnet, har användningen av telnet för dess avsedda syfte länge varit föråldrad. Men det finns en alternativ användning av telnet som många systemadministratörer och teknikentusiaster fortfarande använder, vilket är att kontrollera anslutningen av fjärranslutna TCP-portar.

Man kan helt enkelt kontrollera om den fjärranslutna TCP-porten lyssnar och svarar korrekt med hjälp av telnet-kommandot. Nedanstående utdrag visar hur vi kan kontrollera om google.com fungerar och fungerar genom att kontrollera HTTP/HTTPS-anslutning.

$ 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.
$

En TCP-port som inte är öppen eller tillgänglig kommer att bete sig som nedan när den kontrolleras med telnet:

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

Detta gör det enkelt att felsöka enkla problem med nätverksanslutning i kombination med kommandon ping, traceroute eller tracepath, netstat etc..

Om du använder RHEL 8 (eller till och med äldre versioner av RHEL/CentOS), har du möjlighet att använda nc (eller Ncat eller Network Connector), som stöder många nätverksdiagnostikrelaterade alternativ. Vi kommer att diskutera hur man installerar och använder det här verktyget på RHEL8 och liknande system.

Vad är nc?

nc (eller Ncat) är ett populärt kommandoradsverktyg för allmänt bruk för att läsa, skriva, omdirigera och kryptera data över ett nätverk. Ursprungligen skrivet för nmap-projektet finns det nu flera Netcat-implementationer tillgängliga. Det fungerar med både TCP och UDP över IPv4 och IPv6 och ger obegränsade potentiella användningsfall.

Nedan är några av de viktigaste funktionerna i nc utility:

  • Förmåga att kedja ihop katter
  • Omdirigering av TCP-, UDP- och SCTP-portar till andra platser
  • Kryptera kommunikation med SSL-stöd
  • Proxystöd via SOCK4/5 eller HTTP-proxyer (inklusive autentisering)
  • Stöder flera plattformar, inklusive Windows, Linux och macOS

Installerar nc

nc är tillgänglig som en del av standardlager i RHEL-system. För att installera det på RHEL 7-systemet, utfärda helt enkelt kommandot nedan på terminalen:

$ sudo yum install -y nc

För RHEL 8-systemet kan du använda dnf som:

$ sudo dnf install -y nc

Kontrollera TCP-anslutning

Även om nc erbjuder en mängd funktioner som stöder ett antal användningsfall över applikationer, är en av de vanligaste under nätverksfelsökning istället för telnet.

nc kan visa om du kan nå en TCP-port. Här är syntaxen:

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

Som ett exempel, om jag vill kontrollera om jag kan nå adminvista.com över http eller https. Jag kan kontrollera att med nc som visas nedan (port 80 är för http medan 443 är för https):

$ nc -vz adminvista.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 adminvista.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.
$

På liknande sätt kommer en icke-nåbar eller blockerad port att visa utdata som (flera adresser kontrolleras som adminvista.com DNS-punkter till flera IP-adresser):

$ nc -vz adminvista.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 adminvista.com.com +short
104.26.10.88
172.67.70.213
104.26.11.88
$

Kontrollera UDP-anslutning

telnet kan bara kontrollera kommunikationen med en fjärransluten TCP-port medan nc låter dig kontrollera TCP såväl som UDP-anslutning.

nc kan helt enkelt skicka UDP-paket istället för standard TCP-paket med:

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

Men UDP är ett sessionslöst protokoll, till skillnad från TCP, så som sådant kan du inte bekräfta end-to-end UDP-anslutning på alla möjliga scenarier bara genom att skicka UDP-paket i ena änden eftersom om inte lyssningsprocessen på fjärränden skickar något svar, kommer nc inte att kunna bedöma om dess skickade paket nådde destinationen eller inte. Men nc erbjuder ett alternativ för att bestämma end-to-end UDP-anslutning genom att starta en UDP-lyssnare, förutsatt att du har rätt åtkomst till CLI på fjärrservern.

Så om du antar att du behöver kontrollera UDP-anslutning mellan två Linux-värdar för DNS med nc, skulle ett enkelt sätt att göra detta vara att starta nc-servern som lyssnar på den port som krävs:

$ sudo nc -ul <Port>

För DNS måste vi kontrollera port 53 vilket skulle göra kommandot ovan som:

$ nc -ul 53

På klientsidan skulle du behöva starta en annan nc-process som skickar UDP-paket till servern:

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

Vilket skulle göra vårt kommando:

$ nc -u <IP/DNS> 53

Med tanke på att ingenting blockerar UDP-trafiken för port 53 mellan dessa två maskiner, bör vad du än skriver och anger på en dator vara synligt på de andra värdarna som tvåvägs chatt. Om inte, blockerar någon brandvägg anslutningen mellan dessa två system.

Server- och klientmodell som använder nc fungerar felfritt för den här typen av enkla anslutningskontroller mellan värdar. Liksom ovanstående UDP-kontroll kan nc också lyssna efter TCP-paket på en given port:

$ sudo nc -l <Port>

På klientsidan kan du normalt skicka TCP-paket för att kontrollera anslutningen:

$ nc <IP/DNS> <Port>

Ovanstående server/klient nc-metod krävs inte i fallet med TCP-anslutningar (till skillnad från UDP) eftersom det är ett anslutningsorienterat protokoll och fungerar med bekräftelser. Alla lyssningsprocesser som arbetar på TCP kommer att svara direkt på nc TCP-paket.

Sammanfattning

Den här artikeln sammanfattar hur nc-verktyget står som en direkt ersättning för telnet i moderna Linux-system när det gäller att kontrollera portanslutningen och ger mycket mer kraft till slutanvändaren när det gäller att diagnostisera och lösa nätverksproblem.

nc hjälp kan nås med nc -h kommandot:

$ 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
$

För mer detaljerad information om nc-kommandot, se dess manualsida.

$ man nc