
Netcat (или nc ) — это утилита командной строки, которая считывает и записывает данные по сетевым соединениям, используя протоколы TCP или UDP. Это один из самых мощных инструментов в арсенале сетевых и системных администраторов, считающийся своего рода швейцарским армейским ножом среди сетевых инструментов.
Netcat кроссплатформен и доступен для Linux, macOS, Windows и BSD. Netcat можно использовать для отладки и мониторинга сетевых подключений, сканирования открытых портов, передачи данных, в качестве прокси-сервера и других целей.
Пакет Netcat предустановлен в macOS и популярных дистрибутивах Linux, таких как Ubuntu, Debian или CentOS.
Синтаксис Netcat
Самый простой синтаксис утилиты 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.10.8.8 20-80
Параметр -z сообщит nc , что нужно только сканировать открытые порты, не отправляя на них никаких данных, а параметр -v — предоставлять более подробную информацию.
Вывод будет выглядеть примерно так:
nc: connect to 10.10.8.8 port 20 (tcp) failed: Connection refused nc: connect to 10.10.8.8 port 21 (tcp) failed: Connection refused Connection to 10.10.8.8 22 port [tcp/ssh] succeeded! nc: connect to 10.10.8.8 port 23 (tcp) failed: Connection refused ... nc: connect to 10.10.8.8 port 79 (tcp) failed: Connection refused Connection to 10.10.8.8 80 port [tcp/http] succeeded!
Если вы хотите вывести только строки с открытыми портами, вы можете отфильтровать результаты с помощью команды grep .
nc -z -v 10.10.8.8 20-80 2>&1 | grep succeeded
Connection to 10.10.8.8 22 port [tcp/ssh] succeeded! Connection to 10.10.8.8 80 port [tcp/http] succeeded!
Вы также можете использовать Netcat для определения версии серверного программного обеспечения. Например, если вы отправите команду «EXIT» на сервер через порт SSH по умолчанию 22 :
echo "EXIT" | nc 10.10.8.8 22
Вывод будет выглядеть примерно так:
SSH-2.0-OpenSSH_7.6p1 Ubuntu-4 Protocol mismatch.
Для сканирования портов UDP просто добавьте опцию -u к команде, как показано ниже:
nc -z -v -u 10.10.8.8 20-80
Как правило, Nmap является лучшим инструментом для комплексного сканирования портов, чем Netcat.
Отправка файлов через Netcat
Netcat можно использовать для передачи данных с одного хоста на другой, создав базовую модель клиент/сервер.
Это работает путем настройки Netcat на прослушивание определенного порта (с помощью опции -l ) на принимающем хосте, а затем установления обычного TCP-соединения с другим хостом и отправки файла через него.
На принимающем компьютере выполните следующую команду, которая откроет порт 5555 для входящих подключений и перенаправит вывод в файл:
nc -l 5555 > file_name
С отправляющего хоста подключитесь к принимающему хосту и отправьте файл:
nc receiving.host.com 5555 < file_name
Для переноса каталога можно использовать tar для архивации каталога на исходном хосте и извлечения архива на целевом хосте.
На принимающем хосте настройте инструмент Netcat на прослушивание входящего соединения на порту 5555. Входящие данные передаются команде tar , которая извлекает архив:
nc -l 5555 | tar xzvf -
На отправляющем хосте упакуйте каталог и отправьте данные, подключившись к прослушивающему процессу nc на принимающем хосте:
tar czvf - /path/to/dir | nc receiving.host.com 5555
Вы можете наблюдать за ходом передачи данных с обеих сторон. После завершения нажмите CTRL+C , чтобы закрыть соединение.
Создание простого чат-сервера
Процедура создания онлайн-чата между двумя или более хостами такая же, как и при передаче файлов.
На первом хосте запустите процесс Netcat для прослушивания порта 5555:
nc -l 5555
Со второго хоста выполните следующую команду для подключения к прослушиваемому порту:
nc first.host.com 5555
Теперь, если вы введете сообщение и нажмете ENTER оно будет отображено на обоих хостах.
Чтобы закрыть соединение, нажмите CTRL+C .
Выполнение HTTP-запроса
Хотя существуют гораздо лучшие инструменты для HTTP-запросов, такие как curl , вы также можете использовать Netcat для отправки различных запросов на удаленные серверы.
Например, чтобы получить страницу руководства Netcat с веб-сайта OpenBSD, введите:
printf "GET /nc.1 HTTP/1.1rnHost: man.openbsd.orgrnrn" | nc man.openbsd.org 80
Полный ответ, включая заголовки HTTP и HTML-код, будет выведен в терминал.
Заключение
В этом уроке вы узнали, как использовать утилиту Netcat для установления и тестирования соединений TCP и UDP.
Для получения более подробной информации посетите страницу руководства Netcat и прочтите обо всех других мощных возможностях команды Netcat.
Если у вас есть вопросы или замечания, пожалуйста, оставьте комментарий ниже.
Связанные руководства