ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)
Понедельник, 31 марта, 2025
Сегодня у нас 1 праздник:
Международный День Резервного Копирования (World Backup Day). Пользователи сайта социальных новостей reddit предложили сделать дату 31.03 Международным днём резервного копирования, аргументируя это тем, что никогда заранее нельзя узнать, какие сюрпризы преподнесёт 1.04

Команда Netcat (nc) в Linux с примерами

Команда Netcat (nc) в Linux с примерами

Netcat (или nc) — это утилита командной строки, которая читает и записывает данные через сетевые подключения, используя протоколы TCP или UDP. Это одна из самых мощных инструментов в арсенале сетевых и системных администраторов, который считается швейцарским армейским ножом сетевых инструментов.

Netcat является кроссплатформенным и доступен для Linux, macOS, Windows и BSD. Вы можете использовать Netcat для отладки и мониторинга сетевых подключений, сканирования открытых портов, передачи данных в качестве прокси-сервера и многого другого. Пакет Netcat предустановлен в MacOS и популярных дистрибутивах Linux, таких как Ubuntu.

 

Самый основной синтаксис утилиты Netcat имеет следующий вид:

nc [options] host port

В Ubuntu вы можете использовать либо netcat или nc. Обе они являются символическими ссылками на версию Netcat для openBSD.

По умолчанию Netcat пытается установить TCP-соединение с указанным хостом и портом. Если вы хотите установить UDP-соединение, используйте -uопцию:

nc -u host port

Сканирование портов является одним из наиболее распространенных способов использования Netcat. Вы можете сканировать один порт или диапазон портов.

Например, для поиска открытых портов в диапазоне 20-80 вы должны использовать следующую команду:

nc -z -v 10.9.9.9 20-80

Опция -z скажет nc сканировать только открытые порты, без отправки каких — либо данных на них и -v дает возможность предоставления более подробной информации.

Вывод будет выглядеть примерно так:

nc: connect to 10.9.9.9 port 20 (tcp) failed: Connection refused
nc: connect to 10.9.9.9 port 21 (tcp) failed: Connection refused
Connection to 10.9.9.9 22 port [tcp/ssh] succeeded!
nc: connect to 10.9.9.9 port 23 (tcp) failed: Connection refused
...
nc: connect to 10.9.9.9 port 79 (tcp) failed: Connection refused
Connection to 10.9.9.9 80 port [tcp/http] succeeded!

Если вы хотите распечатать только строки с открытыми портами, вы можете отфильтровать результаты с помощью команды grep.

nc -z -v 10.9.9.9 20-80 2>&1 | grep succeeded
Connection to 10.9.9.9 22 port [tcp/ssh] succeeded!
Connection to 10.9.9.9 80 port [tcp/http] succeeded!

Вы также можете использовать Netcat для поиска серверного программного обеспечения и его версии. Например, если вы отправляете команду «EXIT» на сервер по стандартному SSH-порту 22:

echo "EXIT" | nc 10.9.9.9 22

Вывод будет выглядеть примерно так:

SSH-2.0-OpenSSH_7.6p1 Ubuntu-4
Protocol mismatch.

Для сканирования портов UDP просто добавьте параметр -u в команду, как показано ниже:

nc -z -v -u 10.9.9.9 20-80

В большинстве случаев Nmap лучше, чем Netcat, для сканирования сложных портов.

 

Netcat можно использовать для передачи данных с одного хоста на другой, создав базовую модель клиент/сервер.

Это работает, настроив Netcat на прослушивание определенного порта (используя опцию -l) на принимающем хосте, а затем установив обычное TCP-соединение с другим хостом и отправив файл через него.

На приеме запустите следующую команду, которая откроет порт 5555 для входящего соединения и перенаправит вывод в файл:

nc -l 5555 > file_name

С узла-отправителя подключитесь к узлу-получателю и отправьте файл:

nc receiving.andreyex.ru 5555 < file_name

Для передачи каталога вы можете использовать tar для архивирования каталога на исходном хосте и для извлечения архива на конечном хосте.
На принимающем хосте настройте средство Netcat на прослушивание входящего соединения через порт 5555. Входящие данные передаются в команду tar, которая извлечет архив:

nc -l 5555 | tar xzvf -

На отправляющем хосте упакуйте каталог и отправьте данные, подключившись к процессу прослушивания nc на принимающем хосте:

tar czvf - /path/to/dir | nc receiving.andreyex.ru 5555

Вы можете наблюдать за прогрессом передачи на обоих концах. После завершения введите CTRL+C, чтобы закрыть соединение.

 

Процедура создания онлайн-чата между двумя или более хостами такая же, как и при передаче файлов.

На первом хосте запустите процесс Netcat для прослушивания порта 5555:

nc -l 5555

Со второго хоста выполните следующую команду для подключения к порту прослушивания:

nc first.andreyex.ru 5555

Теперь, если вы наберете сообщение и нажмете ENTER, оно будет показано на обоих хостах.

Чтобы закрыть соединение, введите CTRL+C.

 

Несмотря на то, что есть намного лучшие инструменты для HTTP-запросов, такие как curl, вы также можете использовать Netcat для отправки различных запросов на удаленные серверы.

Например, чтобы получить справочную страницу Netcat с веб-сайта OpenBSD, введите:

printf "GET /nc.1 HTTP/1.1\r\nHost: man.openbsd.org\r\n\r\n" | nc man.openbsd.org 80

Полный ответ, включая заголовки HTTP и код HTML, будет напечатан в терминале.

 

Из этой статьи вы узнали, как использовать утилиту Netcat для установки и тестирования соединений TCP и UDP.

Для получения дополнительной информации посетите справочную страницу Netcat и прочитайте обо всех других мощных параметрах команды Netcat.

Если у вас есть какие-либо вопросы или замечания, пожалуйста, оставьте комментарий ниже.

Exit mobile version