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 и предоставя неограничени потенциални случаи на употреба.
По-долу са някои от основните характеристики на помощната програма 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 на отдалечения сървър.
Така че ако приемем, че трябва да проверите 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