Netcat — это инструмент командной строки, отвечающий за чтение и запись данных в сети. Для обмена данными Netcat использует сетевые протоколы TCP/IP и UDP. Этот инструмент изначально пришел из мира Unix, но теперь доступен для всех платформ.
Благодаря своей универсальности Netcat часто называют «швейцарским армейским ножом для TCP/IP». Например, он позволяет диагностировать неисправности и проблемы, которые ставят под угрозу функциональность и безопасность сети. Сканирование портов, потоковая передача данных или простая передача данных также могут быть выполнены Netcat. Кроме того, можно настроить чат и веб-серверы, а также запустить почтовые запросы. Упрощенное программное обеспечение, разработанное еще в середине 1990-х годов, может работать в режиме сервера и клиента.
Как использовать Netcat?
Netcat можно использовать на всех платформах через командную строку. Инструмент командной строки обычно предустановлен на Linux и macOS. Пользователям Windows необходимо загрузить программу из интернета. Специальные шаги по установке не требуются; для использования в Windows достаточно загрузить файл программы (nc.exe). Затем вы можете использовать Netcat с помощью командной строки (cmd.exe) для выполнения различных сетевых задач. Запустите командную строку следующим образом:
- Нажмите комбинацию клавиш [Windows] + [R].
- Введите «cmd» в поле ввода (1)
- Нажмите кнопку «OK» (2)
После этого откроется cmd.exe со следующим экраном:
Чтобы запустить программный файл (nc.exe), необходимо также переключиться на место сохранения. Если nc.exe сохранен в папке «netcat» на рабочем столе Windows, синтаксис будет выглядеть следующим образом:
cd C:UsersUSERNAMEDesktopnetcat
Команда «cd» (change directory) активирует переключение; основной путь программы обращается к папке хранения файла nc.exe. В командной строке переключение выглядит следующим образом:
Netcat требует расширенных прав доступа для выполнения ряда операций. В Windows 10 командную строку можно запустить всего за несколько шагов с правами администратора:
- Щелкните правой кнопкой мыши по символу Windows в левой части панели задач или нажмите комбинацию клавиш [Windows] + [X].
- В появившемся контекстном меню выберите «Командная строка (администратор)»:
Использование Netcat связано с определенными рисками безопасности. По этой причине инструмент должен использоваться только опытными пользователями и системными администраторами — особенно в режиме с расширенными правами доступа.
Синтаксис Netcat: какие команды и опции существуют?
Синтаксис Netcat состоит из двух основных компонентов: постоянной базовой команды «nc», за которой следуют различные «опции». Базовая команда обращается к программному файлу nc.exe., а опции определяют конкретные функциональные рамки версии Netcat. В зависимости от операционной системы и используемой версии Netcat, возможности варьируются.
В следующей таблице приведены только основные опции, доступные в большинстве версий для Linux, macOS и Windows. Кроме того, перечислены дополнительные полезные опции — в частности, расширения, основанные на широко распространенной версии GNU Netcat для Linux, Unix и macOS:
Опции |
Описание |
-4 |
Принудительное использование IPv4 (GNU Netcat) |
-6 |
Заставляет использовать IPv6 (GNU Netcat) |
-d |
Выпускает Netcat из консоли (работает в фоновом режиме; доступно в Windows и текущих версиях GNU Netcat) |
-D |
Активирует опцию отладки сокетов (GNU Netcat) |
-h (отобразить справку) |
Отображает справку (команды/опции с кратким описанием) |
-i (secs) |
Задержка в секундах для отправленных строк или сканированных портов |
-k |
По окончании соединения Netcat ожидает нового соединения (возможно только в GNU Netcat и только в сочетании с «-l») |
-l (режим прослушивания) |
Режим прослушивания и сервера для входящих запросов на соединение (через указанный порт) |
-L Слушать сильнее |
Netcat также продолжает работать в режиме прослушивания после разрыва соединения на стороне клиента (последовательно с теми же параметрами; поддерживается только версией для Windows) |
-n (только числовые) |
Только IP-номера, без имен DNS |
-o (файл) |
Выполняется шестнадцатеричный дамп трафика данных (содержимое файлов представлено в шестнадцатеричном виде); используется для поиска неисправностей (отладка сетевых приложений); возможна запись/прослушивание связи (для исходящих и входящих пакетов) |
-p (порт) |
Вводит локальный порт источника, который Netcat должен использовать для исходящих соединений |
-r |
Использование случайных значений портов при сканировании (для локальных и удаленных портов) |
-s (адрес) |
Определяет локальный адрес источника (IP-адрес или имя) |
-t |
Режим Telnet (позволяет связаться с сервером через Telnet); требует специальной компиляции Netcat, иначе опция недоступна. |
-u |
Использование режима UDP (вместо TCP) |
-U (шлюз). |
Netcat использует доменные сокеты Unix (GNU Netcat) |
-v |
Обширный вывод (например, отвечает за отображение и объем выводимых сообщений о неисправностях) |
-w (секунды) |
Определяет тайм-ауты; для установления и завершения соединений (единица измерения: секунды) |
-z |
Режим сканирования портов (режим нулевого ввода/вывода); сканируются только прослушивающие сервисы (данные не отправляются). |
Простым примером использования синтаксиса Netcat является доступ к справке с помощью параметра «-h»:
C:UsersUSERNAMEDesktopnetcat>nc -h
Например, если вы хотите определить сервер или клиент в сети для передачи данных, применяется следующий синтаксис:
Режим клиента (подключаться к чему-либо):
nc [options] [IP address/host name] [port]
Режим сервера (прослушивание входящих):
nc -l -p port [options] [host name] [port]
Фундаментальная структура для запуска сканирования портов выглядит следующим образом:
nc [options] [host] [port]
Копирование файлов с помощью Netcat
Часто используемой функцией Netcat является копирование файлов. Можно отправлять даже большие объемы данных и клонировать отдельные разделы или целые жесткие диски. В нашем примере файл testfile.txt копируется с компьютера A (клиент) на компьютер B (сервер) через порт 6790: Необходимо выполнить следующие действия:
- Определить IP-адрес компьютера B (компьютер назначения).
- Создать тестовый файлtestfile.txt в папке Netcat компьютера A; в данном примере файл fest находится в папке Netcat клиента. Затем скопированный файл оказывается в папке Netcat на компьютере B (другие пути к файлам необходимо скорректировать соответствующим образом).
- Введите синтаксис Netcat в командную строку
Компьютер B (действует как принимающий сервер):
nc -l -p 6790 > testfile.txt
ENTER
Компьютер A (действует как отправляющий клиент):
nc [IP address of computer B] 6790 < testfile.txt
ENTER
Успех передачи не подтверждается в командной строке. Вы можете убедиться, что передача прошла успешно, проверив папку назначения.
Запуск сканирования портов
Чтобы обнаружить любые ошибки и проблемы безопасности, можно запустить сканирование и определить открытые порты. В следующем примере компьютер имеет IP-адрес 192.168.11.1. После IP-адреса для сканирования можно ввести отдельные порты (например, 1), несколько портов (1, 2, 3 и т.д.) или целый диапазон (1-1024):
nc -w 2 -z 192.168.10.1 1-1024
Опция «-w» устанавливает тайм-аут (здесь: «пытаться установить соединение с портами в течение двух секунд»). Опция «-z» указывает Netcat искать только прослушивающие службы и не отправлять никаких данных.
Если добавить опцию «-v», вы получите подробную информацию о сканировании:
nc -v -w 2 -z 192.168.11.1 1-1024
Netcat подтверждает обнаружение открытого порта сообщением «succeeded!»:
Connection to 192.168.11.1 25 port [tcp/smtp] succeeded!
Большинство известных служб, таких как электронная почта, FTP или SSH, работают на сканируемых портах 1-1024. В данном примере Netcat обнаружил открытый SMTP-порт почтового клиента.
Netcat как простая программа для чата
Netcat также может установить простое TCP или UDP соединение между двумя компьютерами и открыть канал связи. В приведенном ниже примере получатель сначала устанавливается на удаленную систему и переводится в режим прослушивания. Затем получатель выступает в роли «слушателя» и использует порт 1605 для получения сообщений. С ним можно связаться по IP-адресу 192.168.11.1.
nc -l -p 1605
ENTER
Затем локальный компьютер (отправляющий ПК) устанавливает соединение с получателем сообщения с помощью следующей команды:
nc 192.168.11.1 1605
ENTER
Если соединение успешно установлено, сообщения могут быть отправлены в обоих направлениях.
Настройка простого веб-сервера
Netcat также можно использовать для настройки простого веб-сервера. Если установленный сервер не может быть достигнут, например, из-за технических проблем, вы можете, по крайней мере, отвечать на запросы подготовленным сообщением об отказе (в виде html-файла):
nc -l -v -p 85 -w10 -L < failuremessage.html
Netcat ожидает запросов, отправленных на порт 85, и отвечает файлом failuremessage.html. Параметр «-L» позволяет поддерживать процесс Netcat после одного запроса. Параметр «-w» прерывает соединение через 10 секунд (таймаут). Параметр «-v» предоставляет оператору сервера информацию о запросах и документирует операционную систему и тип браузера запрашивающего клиентского компьютера, например, с помощью сообщений о состоянии.
Является ли Netcat угрозой безопасности?
Несомненно, Netcat может повсеместно использоваться в сетях и выполняет здесь множество полезных задач. Поэтому неудивительно, что он чрезвычайно популярен среди системных и сетевых администраторов — особенно потому, что создание кода Netcat становится относительно простым после определенного количества времени.
Но есть и обратная сторона: Netcat — это хакерский инструмент, используемый для шпионажа за сетями, поиска уязвимостей, обхода противопожарных стен и использования бэкдоров для захвата компьютеров. Антивирусные программы бьют тревогу, например, когда на компьютере обнаруживается версия Netcat, позволяющая выполнить опцию «-e» благодаря специальной компиляции.
Используя этот «-e» в коде, на удаленном компьютере можно запустить интерактивный интерфейс (backdoor shell). Тот, кто получит неограниченный доступ к cmd.exe в Windows, может нанести значительный ущерб. Дополнительные вредоносные программы также могут быть загружены через backdoor shell. Хакеры часто используют в коде Netcat параметр «-d», который позволяет инструменту командной строки причинять неприятности на компьютерах под управлением Windows — при этом незаметно работая в фоновом режиме.
Чтобы избежать взломанных версий, Netcat следует загружать только из безопасных источников в Интернете. Эксперты по безопасности также советуют тщательно обдумать, нужен ли вообще такой инструмент, как Netcat, при установке систем (особенно frontend-систем).
Еще один риск безопасности: Netcat обычно передает данные открытым текстом без шифрования. По этой причине инструмент следует использовать только в очень хорошо защищенных сетях или — еще лучше — отрезанных от Интернета. Для передачи данных в Интернете лучше использовать преемника Netcat — Cryptcat, поскольку он шифрует данные. Кроме того, при передаче данных, имеющих отношение к безопасности, соединения могут быть туннелированы через SSH.
Преимущества и потенциальные риски ясно показывают, что Netcat — это инструмент, который следует внимательно изучить опытным пользователям, системным администраторам и ИТ-менеджерам. Те, кто понимает преимущества, могут воспользоваться универсальностью и эффективностью инструмента удаленного администрирования. А те, кто способен адекватно оценить опасность для безопасности собственной сети, могут принять превентивные меры, чтобы остановить хакерские атаки — или хотя бы сдержать ущерб.
Однако этот инструмент уже довольно устарел — он появился в хакерских кругах более 20 лет назад. Существуют более совершенные инструменты для различных видов сетевой деятельности. Помимо Cryptcat, стоит упомянуть и Socat. Он может использовать сетевой протокол SCTP в дополнение к TCP и UDP, работает через прокси-серверы и поддерживает шифрование. Он также работает на всех распространенных платформах, как и Netcat.
Но Netcat продолжает пользоваться особым статусом как оптимизированный и быстро развертываемый универсальный инструмент с простым синтаксисом команд. В сочетании с инструментом администрирования Netsh, например, можно использовать гораздо больше возможностей для эффективной диагностики и управления сетью.