Hledáte telnet na RHEL 8? Zkuste nc

Telnet je síťový protokol používaný pro vzdálený přístup k počítači a poskytuje obousměrnou textovou komunikaci. Ke vzájemné komunikaci tedy potřebujete telnet server a klienta.

Telnet je jednou z populárních utilit pro Linux/Windows, která dlouho sloužila svému účelu.

Hlavním problémem telnetu na moderních systémech je, že není bezpečný. Veškerá komunikace v telnetu probíhá v prostém textu a veškerý síťový provoz je nešifrovaný. V podstatě kdokoli se správným přístupem a nástroji může sledovat síťový provoz a číst tento provoz. Většina moderních operačních systémů Linux jako taková nemá předinstalovaný telnet a jiní jej nedoporučují používat.

S příchodem protokolu SSH nebo Secure Shell, který je více než šifrovanou náhradou za telnet, je použití telnetu pro zamýšlený účel již dávno zastaralé. Existuje však alternativní použití telnetu, které mnoho systémových administrátorů a technických nadšenců stále používá, a to kontrola připojení vzdálených portů TCP.

Pomocí příkazu telnet lze jednoduše zkontrolovat, zda vzdálený port TCP naslouchá a správně odpovídá. Níže uvedený úryvek ukazuje, jak můžeme zkontrolovat, zda je google.com aktivní a funguje kontrolou připojení 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.
$

TCP port, který není otevřený nebo přístupný, se bude při kontrole pomocí telnetu chovat jako níže:

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

To usnadňuje odstraňování jednoduchých problémů s připojením k síti v kombinaci s příkazy ping, traceroute nebo tracepath, netstat atd.

Pokud používáte RHEL 8 (nebo dokonce starší verze RHEL/CentOS), máte možnost použít nc (nebo Ncat nebo Network Connector), který podporuje mnoho možností souvisejících s diagnostikou sítě. Budeme diskutovat o tom, jak nainstalovat a používat tento nástroj na RHEL8 a podobných systémech.

Co je nc?

nc (nebo Ncat) je populární univerzální nástroj příkazového řádku pro čtení, zápis, přesměrování a šifrování dat v síti. Původně byl napsán pro projekt nmap, nyní je k dispozici několik implementací Netcat. Pracuje s TCP i UDP přes IPv4 a IPv6 a poskytuje neomezené potenciální případy použití.

Níže jsou uvedeny některé z hlavních funkcí nástroje nc:

  • Schopnost řetězit ncats dohromady
  • Přesměrování portů TCP, UDP a SCTP na jiné stránky
  • Šifrování komunikace s podporou SSL
  • Podpora proxy přes SOCK4/5 nebo HTTP proxy (včetně autentizace)
  • Podporuje více platforem, včetně Windows, Linux a macOS
  Jak používat svůj iPhone při telefonním hovoru

Instalace nc

nc je k dispozici jako součást výchozích úložišť v systémech RHEL. Chcete-li jej nainstalovat do systému RHEL 7, jednoduše zadejte níže uvedený příkaz na terminálu:

$ sudo yum install -y nc

Pro systém RHEL 8 můžete použít dnf jako:

$ sudo dnf install -y nc

Zkontrolujte připojení TCP

Ačkoli nc nabízí řadu funkcí, které podporují řadu případů použití napříč aplikacemi, jedním z běžných je řešení problémů se sítí namísto telnetu.

nc může ukázat, zda můžete dosáhnout portu TCP. Zde je syntaxe:

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

Jako příklad, pokud chci zkontrolovat, zda mohu dosáhnout etechblog.cz přes http nebo https. Mohu zkontrolovat, že pomocí nc, jak je uvedeno níže (port 80 je pro http, zatímco 443 je pro https):

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

Podobně nedosažitelný nebo blokovaný port zobrazí výstup jako (více adres je kontrolováno, protože etechblog.cz DNS ukazuje na více IP adres):

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

Zkontrolujte připojení UDP

telnet může kontrolovat pouze komunikaci se vzdáleným TCP portem, zatímco nc umožňuje kontrolovat TCP i UDP konektivitu.

nc může jednoduše odesílat UDP pakety namísto výchozích TCP pomocí:

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

Ale UDP je protokol bez relace, na rozdíl od TCP, takže jako takový nemůžete potvrdit end-to-end UDP konektivitu ve všech možných scénářích pouhým odesláním UDP paketů na jednom konci, pokud proces naslouchání na vzdáleném konci neodesílá nějakou odezvu, nc nebude schopen posoudit, zda jeho odeslaný paket dosáhl cíle nebo ne. Ale nc nabízí alternativu k určení end-to-end UDP konektivity spuštěním UDP listeneru, za předpokladu, že máte správný přístup k CLI na vzdáleném serveru.

  Jak odstranit vodoznak v aplikaci Microsoft Word

Za předpokladu, že potřebujete zkontrolovat konektivitu UDP mezi dvěma hostiteli Linuxu pro DNS pomocí nc, jednoduchým způsobem by bylo spustit nc server naslouchající na požadovaném portu:

$ sudo nc -ul <Port>

Pro DNS musíme zkontrolovat port 53, který by z výše uvedeného příkazu udělal:

$ nc -ul 53

Na straně klienta byste museli spustit další nc proces, který odesílá pakety UDP na server:

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

Což by znamenalo náš příkaz:

$ nc -u <IP/DNS> 53

Vzhledem k tomu, že nic neblokuje provoz UDP pro port 53 mezi těmito dvěma počítači, cokoliv napíšete a zadáte na jednom počítači, mělo by být viditelné na ostatních hostitelích jako obousměrný chat. Pokud ne, nějaký firewall blokuje konektivitu mezi těmito dvěma systémy.

Model serveru a klienta využívající nc funguje bezchybně pro tyto druhy jednoduchých kontrol připojení mezi hostiteli. Stejně jako výše uvedená kontrola UDP může nc také naslouchat paketům TCP na daném portu:

$ sudo nc -l <Port>

Na straně klienta můžete normálně odesílat pakety TCP pro kontrolu připojení:

$ nc <IP/DNS> <Port>

Výše uvedená metoda server/client nc není vyžadována v případě připojení TCP (na rozdíl od UDP), protože jde o protokol orientovaný na připojení a pracuje s potvrzením. Jakýkoli proces naslouchání pracující na TCP bude přímo reagovat na nc TCP pakety.

souhrn

Tento článek shrnuje, jak obslužný program nc obstojí jako přímá náhrada za telnet v moderních systémech Linux, pokud jde o kontrolu konektivity portů, a poskytuje koncovému uživateli mnohem více výkonu při diagnostice a řešení síťových problémů.

Nápovědu nc lze získat pomocí příkazu 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
$

Podrobnější informace o příkazu nc najdete na jeho manuálové stránce.

$ man nc

  Jak rozbalit soubory TarGZ v Linuxu