Telnet — це мережевий протокол, який використовується для віддаленого доступу до комп’ютера та забезпечує двосторонній текстовий зв’язок. Отже, вам потрібен сервер і клієнт Telnet, щоб спілкуватися один з одним.
Telnet — одна з популярних утиліт Linux/Windows, яка вже давно виконує свою функцію.
Основна проблема telnet у сучасних системах полягає в тому, що він не є безпечним. Уся комунікація в telnet відбувається у вигляді звичайного тексту, і весь мережевий трафік незашифрований. По суті, будь-хто з належним доступом і інструментами може стежити за мережевим трафіком, щоб прочитати цей трафік. Таким чином, більшість сучасних операційних систем Linux не мають попередньо встановленого telnet, а інші рекомендують не використовувати його.
З появою SSH або протоколу Secure Shell, який є більш ніж зашифрованою заміною telnet, використання telnet за призначенням давно застаріло. Але існує альтернативне використання telnet, яким досі користуються багато системних адміністраторів і технічних ентузіастів, тобто для перевірки підключення віддалених портів TCP.
За допомогою команди telnet можна просто перевірити, чи віддалений TCP-порт слухає та відповідає належним чином. У наведеному нижче фрагменті показано, як ми можемо перевірити, чи працює 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 або Network Connector), який підтримує багато опцій, пов’язаних з діагностикою мережі. Ми обговоримо, як встановити та використовувати цей інструмент на RHEL8 та подібних системах.
Що таке nc?
nc (або Ncat) — популярний інструмент командного рядка загального призначення для читання, запису, перенаправлення та шифрування даних у мережі. Спочатку створений для проекту nmap, тепер доступно кілька реалізацій Netcat. Він працює як з TCP, так і з UDP через IPv4 і IPv6 і забезпечує безмежні потенційні випадки використання.
Нижче наведено деякі з основних функцій утиліти 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>
Як приклад, якщо я хочу перевірити, чи можу я отримати доступ до techukraine.net через http або https. Я можу перевірити це за допомогою nc, як показано нижче (порт 80 призначений для http, а 443 – для https):
$ nc -vz techukraine.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 techukraine.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. $
Подібним чином, недоступний або заблокований порт відображатиме такі результати (кілька адрес перевіряються, оскільки techukraine.net DNS вказує на кілька IP-адрес):
$ nc -vz techukraine.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 techukraine.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 на віддаленому сервері.
Отже, якщо припустити, що вам потрібно перевірити з’єднання 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