Търсите telnet на RHEL 8? Опитайте nc

Telnet е мрежов протокол, използван за отдалечен достъп до компютър и осигурява двупосочна текстова комуникация. Така че имате нужда от telnet сървър и клиент, за да общувате помежду си.

Telnet е една от популярните помощни програми за Linux/Windows, която отдавна служи на предназначението си.

Основен проблем с telnet в съвременните системи е, че не е защитен. Цялата комуникация в telnet се осъществява в обикновен текст и целият мрежов трафик е некриптиран. По същество всеки с подходящ достъп и инструменти може да подслушва мрежовия трафик, за да прочете този трафик. Като такива, повечето съвременни операционни системи Linux не идват с предварително инсталиран telnet, а други препоръчват да не го използвате.

С появата на протокола SSH или Secure Shell, който е повече от криптиран заместител на telnet, използването на telnet по предназначение отдавна е остаряло. Но има алтернативно използване на telnet, което много системни администратори и технически ентусиасти все още използват, което е за проверка на свързаността на отдалечени TCP портове.

Човек може просто да провери дали отдалеченият TCP порт слуша и отговаря правилно с помощта на командата telnet. Фрагментът по-долу показва как можем да проверим дали google.com работи и работи, като проверим 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 порт, който не е отворен или достъпен, ще се държи като по-долу, когато се проверява с telnet:

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

Това прави отстраняването на прости проблеми с мрежовата свързаност лесно в комбинация с команди ping, traceroute или tracepath, netstat и др.

Ако използвате RHEL 8 (или дори по-стари версии на RHEL/CentOS), имате опцията да използвате nc (или Ncat или мрежов конектор), който поддържа много опции, свързани с мрежова диагностика. Ще обсъдим как да инсталираме и използваме този инструмент на RHEL8 и подобни системи.

Какво е nc?

nc (или Ncat) е популярен инструмент за команден ред с общо предназначение за четене, писане, пренасочване и криптиране на данни в мрежа. Първоначално написан за проект nmap, сега има множество налични реализации на Netcat. Той работи както с TCP, така и с UDP през IPv4 и IPv6 и предоставя неограничени потенциални случаи на употреба.

  Как да добавяте и премахвате хора в групов текст на iPhone

По-долу са някои от основните характеристики на помощната програма nc:

  • Възможност за свързване на котки заедно
  • Пренасочване на TCP, UDP и SCTP портове към други сайтове
  • Шифроване на комуникация с поддръжка на SSL
  • Поддръжка на прокси чрез SOCK4/5 или HTTP прокси (включително удостоверяване)
  • Поддържа множество платформи, включително Windows, Linux и macOS

Инсталиране на nc

nc е наличен като част от хранилища по подразбиране в RHEL системи. За да го инсталирате на система RHEL 7, просто издайте командата по-долу на терминала:

$ sudo yum install -y nc

За система RHEL 8 можете да използвате dnf като:

$ sudo dnf install -y nc

Проверете TCP свързаността

Въпреки че nc предлага множество функции, които поддържат редица случаи на използване в приложенията, един от често срещаните е по време на отстраняване на неизправности в мрежата вместо telnet.

nc може да покаже дали можете да достигнете до TCP порт. Ето синтаксиса:

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

Като пример, ако искам да проверя дали мога да достигна до pctechbg.net през http или https. Мога да проверя това с помощта на nc, както е показано по-долу (порт 80 е за http, докато 443 е за https):

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

По същия начин, недостъпен или блокиран порт ще покаже резултат като (няколко адреса се проверяват като pctechbg.net DNS точки към множество IP адреси):

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

Проверете UDP свързаността

telnet може да проверява комуникацията само с отдалечен TCP порт, докато nc ви позволява да проверявате TCP, както и UDP свързаността.

nc може просто да изпраща UDP пакети вместо TCP по подразбиране, използвайки:

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

Но UDP е протокол без сесии, за разлика от TCP, така че като такъв не можете да потвърдите UDP свързаността от край до край при всички възможни сценарии само чрез изпращане на UDP пакети на единия край, освен ако процесът на слушане на отдалечения край не изпрати някакъв отговор, nc няма да може да прецени дали изпратеният му пакет е достигнал дестинацията или не. Но nc предлага алтернатива за определяне на UDP свързаност от край до край чрез стартиране на UDP слушател, ако приемем, че имате подходящ достъп до CLI на отдалечения сървър.

  10 инструмента за кръстосано тестване на облачни браузъри [2022]

Така че ако приемем, че трябва да проверите UDP свързаността между два Linux хоста за DNS с помощта на nc, лесен начин да направите това е да стартирате nc сървър, който слуша на необходимия порт:

$ sudo nc -ul <Port>

За DNS трябва да проверим порт 53, което ще направи горната команда като:

$ nc -ul 53

От страна на клиента ще трябва да стартирате друг nc процес, който изпраща UDP пакети към сървъра:

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

Което ще направи нашата команда:

$ nc -u <IP/DNS> 53

Като се има предвид, че нищо не блокира UDP трафика за порт 53 между тези две машини, каквото и да въвеждате и въвеждате на една машина, трябва да се вижда на другите хостове като двупосочен чат. Ако не, някаква защитна стена блокира връзката между тези две системи.

Сървърният и клиентският модел, използващ nc, работи безупречно за тези видове прости проверки на свързаността между хостовете. Подобно на горната UDP проверка, nc може също да слуша за TCP пакети на даден порт:

$ sudo nc -l <Port>

От страна на клиента обикновено можете да изпращате TCP пакети, за да проверите връзката:

$ nc <IP/DNS> <Port>

Горният метод сървър/клиент nc не се изисква в случай на TCP връзки (за разлика от UDP), тъй като е ориентиран към свързване протокол и работи с потвърждения. Всеки процес на слушане, работещ на TCP, ще отговори директно на nc TCP пакети.

Резюме

Тази статия обобщава как помощната програма nc е директен заместител на telnet в съвременните Linux системи, що се отнася до проверката на свързаността на портовете, и предоставя много повече мощност на крайния потребител при диагностициране и разрешаване на мрежови проблеми.

Помощта за nc може да бъде достъпна чрез командата 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
$

За по-подробна информация относно командата nc вижте нейната страница с ръководство.

$ man nc