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

Команда Netcat nc

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.

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

терминал Netcat

Связанные руководства

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *