Ser du etter telnet på RHEL 8? Prøv nc

Telnet er en nettverksprotokoll som brukes for ekstern tilgang til en datamaskin og gir toveis tekstbasert kommunikasjon. Så du trenger en telnet-server og klient for å snakke med hverandre.

Telnet er et av de populære Linux/Windows-verktøyene som lenge har tjent sin hensikt.

Et stort problem med telnet på moderne systemer er at det ikke er sikkert. All kommunikasjon i telnet skjer i ren tekst, og all nettverkstrafikk er ukryptert. I hovedsak alle med riktig tilgang og verktøy kan snoke på nettverkstrafikk for å lese denne trafikken. Som sådan kommer de fleste moderne Linux-operativsystemer ikke med telnet forhåndsinstallert, og andre anbefaler å ikke bruke det.

Med bruken av SSH eller Secure Shell-protokollen, som er mer enn en kryptert erstatning for telnet, har bruken av telnet til det tiltenkte formålet lenge vært utdatert. Men det er en alternativ bruk av telnet som mange systemadministratorer og teknologientusiaster fortsatt bruker, som er å sjekke tilkoblingen til eksterne TCP-porter.

Man kan ganske enkelt sjekke om den eksterne TCP-porten lytter og svarer riktig ved å bruke telnet-kommandoen. Utdraget nedenfor viser hvordan vi kan sjekke om google.com er oppe og fungerer ved å sjekke HTTP/HTTPS-tilkobling.

$ 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 ikke er åpen eller tilgjengelig, vil oppføre seg som nedenfor når den er sjekket med telnet:

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

Dette gjør det enkelt å feilsøke enkle nettverkstilkoblingsproblemer i kombinasjon med ping-, traceroute- eller tracepath-, netstat etc.-kommandoer.

Hvis du bruker RHEL 8 (eller til og med eldre versjoner av RHEL/CentOS), har du muligheten til å bruke nc (eller Ncat eller Network Connector), som støtter mange nettverksdiagnoserelaterte alternativer. Vi skal diskutere hvordan du installerer og bruker dette verktøyet på RHEL8 og lignende systemer.

Hva er nc?

nc (eller Ncat) er et populært kommandolinjeverktøy for generell bruk for å lese, skrive, omdirigere og kryptere data over et nettverk. Opprinnelig skrevet for nmap-prosjektet, er det nå flere Netcat-implementeringer tilgjengelig. Den fungerer med både TCP og UDP på ​​tvers av IPv4 og IPv6 og gir ubegrensede potensielle brukstilfeller.

  Varsling er der materialdesign møter varsler på låseskjerm

Nedenfor er noen av hovedfunksjonene til nc-verktøyet:

  • Evne til å lenke katter sammen
  • Omdirigering av TCP-, UDP- og SCTP-porter til andre nettsteder
  • Krypter kommunikasjon med SSL-støtte
  • Proxy-støtte via SOCK4/5 eller HTTP proxyer (inkludert autentisering)
  • Støtter flere plattformer, inkludert Windows, Linux og macOS

Installerer nc

nc er tilgjengelig som en del av standard repositories i RHEL-systemer. For å installere det på RHEL 7-systemet, utfør ganske enkelt kommandoen nedenfor på terminalen:

$ sudo yum install -y nc

For RHEL 8-systemet kan du bruke dnf som:

$ sudo dnf install -y nc

Sjekk TCP-tilkobling

Selv om nc tilbyr en rekke funksjoner som støtter en rekke brukstilfeller på tvers av applikasjoner, er en av de vanlige under nettverksfeilsøking i stedet for telnet.

nc kan vise om du kan nå en TCP-port. Her er syntaksen:

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

Som et eksempel, hvis jeg vil sjekke om jeg kan nå tipsbilk.net over http eller https. Jeg kan sjekke at ved å bruke nc som vist nedenfor (port 80 er for http mens 443 er for https):

$ nc -vz tipsbilk.net.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 tipsbilk.net.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å samme måte vil en ikke-tilgjengelig eller blokkert port vise utdata som (flere adresser er sjekket som tipsbilk.net DNS-punkter til flere IP-er):

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

Sjekk UDP-tilkobling

telnet kan bare sjekke kommunikasjon med en ekstern TCP-port mens nc lar deg sjekke TCP samt UDP-tilkobling.

nc kan ganske enkelt sende UDP-pakker i stedet for standard TCP-pakker ved å bruke:

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

Men UDP er en sesjonsfri protokoll, i motsetning til TCP, så som sådan kan du ikke bekrefte ende-til-ende UDP-tilkobling på alle mulige scenarier bare ved å sende UDP-pakker i den ene enden som med mindre lytteprosessen på den eksterne enden sender noe svar, vil nc ikke være i stand til å bedømme om den sendte pakken nådde destinasjonen eller ikke. Men nc tilbyr et alternativ for å bestemme ende-til-ende UDP-tilkobling ved å starte en UDP-lytter, forutsatt at du har riktig tilgang til CLI på den eksterne serveren.

  7 høyt betalende jobbroller innen IT

Så forutsatt at du må sjekke UDP-tilkobling mellom to Linux-verter for DNS ved bruk av nc, vil en enkel måte å gjøre dette på være å starte nc-server-lytting på nødvendig port:

$ sudo nc -ul <Port>

For DNS må vi sjekke port 53 som vil gjøre kommandoen ovenfor som:

$ nc -ul 53

På klientsiden må du starte en annen nc-prosess som sender UDP-pakker til serveren:

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

Som ville gjøre vår kommando:

$ nc -u <IP/DNS> 53

Med tanke på at ingenting blokkerer UDP-trafikken for port 53 mellom disse to maskinene, bør det du skriver og skriver inn på en maskin være synlig på de andre vertene som toveis chat. Hvis ikke, blokkerer en brannmur tilkoblingen mellom disse to systemene.

Server- og klientmodell som bruker nc fungerer feilfritt for denne typen enkle tilkoblingskontroller mellom verter. Som UDP-kontrollen ovenfor, kan nc også lytte etter TCP-pakker på en gitt port:

$ sudo nc -l <Port>

På klientsiden kan du normalt sende TCP-pakker for å sjekke tilkoblingen:

$ nc <IP/DNS> <Port>

Ovennevnte server/klient nc-metode er ikke nødvendig i tilfelle av TCP-tilkoblinger (i motsetning til UDP) da det er en tilkoblingsorientert protokoll og fungerer med bekreftelser. Enhver lytteprosess som jobber på TCP vil svare direkte på nc TCP-pakker.

Sammendrag

Denne artikkelen oppsummerer hvordan nc-verktøyet står som en direkte erstatning for telnet i moderne Linux-systemer når det gjelder å sjekke porttilkoblingen, og gir mye mer kraft til sluttbrukeren når det gjelder å diagnostisere og løse nettverksproblemer.

nc hjelp kan nås ved å bruke nc -h kommando:

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

For mer detaljert informasjon om nc-kommandoen, se manualsiden.

$ man nc