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 будет вести себя так, как показано ниже:v
$ telnet google.com 22
Trying 142.250.193.174...
^C
$
Он упрощает поиск и устранение простых проблем с сетевым подключением в сочетании с командами ping, traceroute или tracepath, netstat и т.д.
Если вы используете RHEL 8 (или даже более старые версии RHEL/CentOS), у вас есть возможность использовать nc (или Ncat, или Network Connector), который поддерживает множество опций, связанных с диагностикой сети.
Мы обсудим, как установить и использовать этот инструмент на RHEL8 и подобных системах.
🖧 Использование Netcat для сканирования портов
Что такое nc?
nc (или Ncat) – это популярный инструмент командной строки общего назначения для чтения, записи, перенаправления и шифрования данных по сети.
Первоначально он был написан для проекта nmap, но сейчас существует множество реализаций Netcat.
Он работает с TCP и UDP в сетях IPv4 и IPv6 и предоставляет безграничные возможности для использования.
Ниже перечислены некоторые из основных возможностей утилиты nc:
- Возможность объединять ncat в цепочку
- Перенаправление портов TCP, UDP и SCTP на другие сайты.
- Шифрование связи с поддержкой SSL
- Поддержка прокси через SOCK4/5 или HTTP прокси (включая аутентификацию).
- Поддержка нескольких платформ, включая Windows, Linux и macOS
Установка nc
nc доступен в составе репозиториев по умолчанию в системах RHEL.
Чтобы установить его в системе RHEL 7, просто выполните следующую команду в терминале:
$ nc -vz itsecforu.ru 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 itsecforu.ru 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.
$
$ nc -vz itsecforu.ru 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 itsecforu.ru +short
104.26.10.88
172.67.70.213
104.26.11.88
$
Проверка UDP соединения
telnet может проверять связь только с удаленным TCP-портом, в то время как nc позволяет проверять как TCP, так и UDP-соединение.
nc может просто отправлять UDP-пакеты вместо стандартных TCP-пакетов:
Учитывая, что ничто не блокирует UDP-трафик для порта 53 между этими двумя машинами, все, что вы набираете и вводите на одной машине, должно быть видно на других хостах, как двусторонний чат.
Если это не так, то какой-то брандмауэр блокирует соединение между этими двумя системами.
Модель сервера и клиента с использованием nc безупречно работает для таких простых проверок соединения между хостами.
Как и в случае с проверкой UDP, nc также может прослушивать TCP-пакеты на заданном порту:
На стороне клиента вы можете обычно отправлять 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 можно найти на странице ее руководства.