Netcat linux как пользоваться

Обновлено: 05.07.2024

Список инструментов для тестирования на проникновение и их описание

Описание Ncat

Программа Ncat является написанным с нуля популярной (но давно не поддерживаемой) программы Netcat, nc. Кроме Ncat имеются и другие варианты Netcat, которые переписаны из оригинального кода или написаны с нуля. Поэтому аналогичные программы с аналогичными функциями могут называться по-разному, также они могут отличаться друг от друга возможностями и набором опций, но главная функция у них одинаковая.

Данный справочный материал описывает Ncat — вариант Netcat от авторов Nmap. Программа Ncat является популярной и в некоторых дистрибутивах предустановлена по умолчанию вместо Netcat.

Ncat — это многофункциональная сетевая утилита, которая считывает и записывает данные в сети из командной строки. Ncat была написана для Nmap Project в качестве сильно улучшенной реинкарнации почтенной программы Netcat. Она использует TCP и UDP для коммуникации и создана быть надёжным движком для мгновенно подключения по сети к другим приложениям и пользователям. Ncat не только работает с IPv4 и IPv6, но и обеспечивает пользователя потенциально безграничным числом вариантов использования.

Ncat интегрирована с Nmap и доступна в стандартных пакетах при загрузке Nmap (включая исходный код, а также исполнимые файлы для Linux, Windows, и Mac) — всё это доступно на странице загрузки Nmap. Также имеется репозиторий исходного кода SVN.

Авторы: Chris Gibson,

Справка по Ncat

Руководство по Ncat

Название

ncat — конкатенация и перенаправление сокетов

Синопсис

Режим подключения (connect mode) и режим прослушивания (listen mode)

В режиме подключения аргументы имя_хоста и порт говорят, к чему подключиться. Имя_хоста нужно указать обязательно, это может быть имя хоста (такое как доменное имя, например) или IP адрес. Если порт указан, то это должно быть десятичное число. Если порт пропущен, то используется значение по умолчанию 31337.

В режиме прослушивания, имя_хоста и порт контролирует адрес сервера, к которому будет сделана привязка (bind). В режиме прослушивания оба аргумента являются опциональными. Если пропущено имя хоста, то по умолчанию прослушиваются все доступные адреса по IPv4 и IPv6. Если пропущен порт, то по умолчанию прослушивается порт 31337.

Опции протоколов

-4 (только IPv4)

Принудительно использовать только IPv4.

-6 (только IPv6)

Принудительно использовать только IPv6.

-U, --unixsock (Используйте доменные сокеты Unix)

Используйте доменные сокеты Unix, а не сетевые сокеты. Эта опция может использоваться сама по себе для потоковых сокетов или в сочетании с --udp для датаграмных сокетов. Описание режима -U будет далее в подразделе с названием «Доменные сокеты Unix».

-u, --udp (Использовать UDP)

Использовать UDP для подключений (по умолчанию используется TCP).

--sctp (Использовать SCTP)

Использовать для подключений SCTP (по умолчанию используется TCP). SCTP поддержка реализована в совместимом с TCP режиме (TCP-compatible mode).

Опции режима подключения

Чтобы понимать следующие опции программы Ncat нужно знать об опциях Интернет протокола (Internet Protocol). Имеется ряд опциональных параметров, которые могут присутствовать в датаграммах Internet Protocol 4 версии. Как правило, они настраивают ряд вариантов поведения, таких как метод, который будет использоваться во время маршрутизации источника, некоторые средства управления и проверки и ряд экспериментальных функций.

Свободная исходная маршрутизация

Свободная маршрутизация от источника — это опция IP, которую можно использовать для трансляции адресов. LSR также используется для реализации мобильности в IP-сетях.

Свободная исходная маршрутизация использует опцию исходной маршрутизации в IP для записи набора маршрутизаторов, которые должен посетить пакет. Пункт назначения пакета заменяется следующим маршрутизатором, который пакет должен посетить. Установив агент пересылки (FA) на один из маршрутизаторов, которые должен посетить пакет, LSR эквивалентен туннелированию. Если соответствующий узел хранит параметры LSR и реверсирует их, это эквивалентно функциональности в мобильном IPv6.

Наименование свободной исходной маршрутизации происходит из-за того, что заранее задана только часть пути.

Строгая исходная маршрутизация

Строгая исходная маршрутизация отличается от свободной исходной маршрутизации тем, что в ней каждый шаг маршрута, куда отправляется пакет, заранее определяется.

Устанавливает хопы (hop, узлы) свободной исходной маршрутизации. Вы можете использовать -g один раз со списком, в котором через запятую перечислены хопы, используйте -g несколько раз с одним узлом для построения списка или комбинирования двух. Хопы могут быть заданы как IP адреса или имена хостов.

-G ptr (Установить указатель исходной маршрутизации)

Устанавливает «указатель» исходного маршрута IPv4 для использования с -g. Аргумент должен быть кратным 4 и не более 28. Не все операционные системы поддерживают установку этого указателя на что-либо кроме четырёх.

-p порт, --source-port порт (Указать порт источника)

Установить номер порта для привязки Ncat.

-s хост, --source хост (Указать адрес источника)

Указать адрес для привязки Ncat.

Опции режима прослушивания

Смотрите в разделе «Опции контроля доступа» информацию об установлении ограничений для хостов, которые могут подключиться к прослушивающему процессу Ncat.

-l, --listen (Прослушивать подключения)

Прослушивать подключения, а не подключаться к удалённой машине.

-m numconns, --max-conns numconns (Указывает максимальное число подключений)

Максимальное число одновременных подключений, принимаемых экземпляром Ncat. По умолчанию это 100 (в Windows это 60).

-k, --keep-open (Разрешить множественные подключения)

Обычно прослушивающий сервер принимает только одно подключение и затем завершает рабобту, когда соединение закрывается. Эта опция делает так, что сервер принимает несколько одновременных соединений и ожидает другие соединения, даже если первые были закрыты. Её нужно комбинировать с --listen. В этом режиме нет способа для Ncat узнать, когда сетевой ввод закончится, поэтому она будет работать пока явно не остановлена. Это также означает, что она никогда не закроет свой выходной поток, поэтому любая программа, читающая из Ncat и ищущая конец файла, также будет зависать.

--broker (Посреднические соединения)

Разрешить нескольким сторонам подключаться к централизованному серверу Ncat и общаться друг с другом. Ncat может обеспечивать связь между системами, которые находятся за NAT или иным образом не могут напрямую подключиться. Эта опция используется в сочетании с --listen, в результате чего на порту --listen включён режим брокера.

--chat (Ad-hoc “чат сервер”)

Опции SSL

--ssl (Использовать SSL)

В режиме сервера эта опция прослушивает входящие SSL-соединения, а не обычный трафик в виде простого текста.

В режиме UDP-подключения эта опция включает Datagram TLS (DTLS). Это не поддерживается в режиме сервера.

--ssl-verify (Верификация сертификатов сервера)

В режиме клиента, --ssl-verify это как --ssl кроме того, эта опция также требует верификацию сертификатов сервера. Ncat поставляется со стандартным набором доверенных сертификатов в файле ca-bundle.crt. Некоторые операционные системы предоставляют дефолтный список доверенынх сертификатов, они также будут использоваться, если доступны. Используйте --ssl-trustfile, чтобы указать свой собственный список.

Используйте -v один или более раз для получения подробностей о неудачах верификации. Ncat не проверяет сертификаты на отозванность.

Эта опция не имеет эффекта в серверном режиме.

--ssl-cert certfile.pem (Указать SSL сертификат)

Эта опция передаёт расположения файлов сертификата в PEM кодировке, используемых для аутентификации сервера (в режиме прослушивания) или клиента (в режиме подключения). Используйте её в комбинации с --ssl-key.

--ssl-key keyfile.pem (Указать приватный ключ SSL)

Эта опция передаёт расположения приватного файла ключа в PEM кодировке, который идёт с сертификатом, указанным опцией --ssl-cert.

--ssl-trustfile cert.pem (Список доверенный сертификатов)

Эта опция устанавливает список сертификатов, которые являются доверенными для целей проверки сертификатов. Она не имеет эффекта если не совмещена с --ssl-verify. Аргумент этой опции — это имя PEM файла, содержащего доверенные сертификаты. Обычно этот файл будет содержать сертификаты Центров Сертификации (certification authorities), хотя он может также содержать напрямую сертификаты сервера. Когда используется эта опция, Ncat не использует свои дефолтные сертификаты.

--ssl-ciphers список шифров (Указывает список шифров SSL)

Эта опция устанавливает список набора шифров, которые Ncat будет использовать при подключении к серверам или когда принимает SSL подключения от клиентов. Синтаксис описан в man странице OpenSSL ciphers(1):

и по умолчанию установлен на:

--ssl-alpn список ALPN (Указывает список протокола ALPN)

Эта опция позволяет указать разделённый запятой список протоколов для отправки файлов через TLS расширение Application-Layer Protocol Negotiation. Поддерживается не всеми версиями OpenSSL.

Опции прокси

--proxy хост[:порт] (Указывает адрес прокси)

Запросы проксируются через хост:порт, используя протокол, указанный с --proxy-type.

--proxy-type протокол (Указывает протокол прокси)

В режиме подключения, эта опция устанавливает протокол по которому нужно подключаться через прокси к хосту, указанному в --proxy. В режиме прослушивания, эта опция делает так, что Ncat ведёт себя как прокси сервер, использующий указанный протокол.

--proxy-auth пользователь[:пароль] (Указывает учётные данные прокси)

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

Опции выполнения команд

-e команда, --exec команда (Выполнить команду)

Выполнить указанную команду после того, как соединение было установлено. Команда должна быть указана как полный путь до файла. Весь вывод с удалённого клиента будет отправлен приложению, а ответы отправлены обратно удалённому клиенту через сокет, что делает ваше приложение командной строки интерактивным через сокет. При комбинации с --keep-open, Ncat будет обрабатывать несколько одновременных соединений к указанному вами порту/приложению как inetd. Ncat будет принимать только максимально определённое количество одновременных соединений, управляемых параметром -m. По умолчанию это значение равно 100 (60 в Windows).

-c команда, --sh-exec команда (Выполнить команду через sh)

То же, что и -e, за исключением что она пытается выполнить команду через /bin/sh. Это означает, что вам необязательно указывать полный путь до команды, и доступны такие возможности оболочки как переменные окружения.

--lua-exec файл (Выполнить скрипт .lua)

После установления соединения, запускает указанный файл как Lua скрипт используя встроенный интерпретатор. Стандартный ввод скрипта и стандартный вывод перенаправляются в потоки данных соединения.

Все опции выполнения (exec) добавляют следующие переменные к дочернему окружению:

NCAT_REMOTE_ADDR, NCAT_REMOTE_PORT

IP адрес и номер порта удалённого хоста. В режиме подключения, это целевой адрес, в режиме прослушивания — это клиентский адрес.

NCAT_LOCAL_ADDR, NCAT_LOCAL_PORT

IP адрес и номер порта локального конца соединения.

NCAT_PROTO

Используемый протокол: один из TCP, UDP или SCTP.

Опции контроля доступа

Для подключения к процессу Ncat будет допущены только хосты из указанного списка. Все другие попытки доступа будут отключены. В случае конфликта между --allow и --deny, приоритет имеет --allow. Спецификации хостов имеют такой же синтаксис, какой используют Nmap.

--allowfile файл (Разрешить подключение хостам из файла)

Делает то же самое, что и --allow, за исключением того что разрешает хосты не которые указаны непосредственно в командной строке, а те, которые указаны в файле, эти хосты должны быть перечислены по одному на каждой строке.

Запускает Ncat со списком хостов, кому будет неразрешено подключаться к прослушивающему процессу Ncat. Если они попытаются подключиться, у указанных хостов будет тихо терминирована сессия. В случае конфликта --allow и --deny, приоритет имеет --allow. Синтаксис указания хостов такой же, как и у Nmap.

--denyfile файл (Отклонять подключения от хостов из файла)

У этой опции такая же функциональность, как и у --deny, за исключением того, что хосты указываются не в командной строке, а берутся из файла, где они перечислены в формате: каждый хост на отдельной строке.

Опции настройки времени

Эти опции принимают параметр времени. Он по умолчанию указывается в секундах, хотя вы можете добавить префикс ms, s, m или h, чтобы значения трактовались как миллисекунды, секунды, минуты или часы.

-d время, --delay время (Указывает время задержки)

Устанавливает интервал задержки для отправленных строк. Это эффективно ограничивает количество строк, которые Ncat отправит за указанный период. Это может быть полезно для сайтов с низкой пропускной способностью или для других целей, например для работы с раздражающими опциями iptables --limit

-i время, --idle-timeout время (Specify idle timeout)

Устанавливает фиксированный таймаут для соединений в простое. Если достигнут таймаут соединение прекращается.

-w время, --wait время (Указывает таймаут соединения)

Устанавливает фиксированный таймаут для попытки соединения.

Опции вывода

-o файл, --output файл (сохраняет данные сессии)

Сохраняет (дампит) данные сессии в файл.

-x файл, --hex-dump файл (Сохраняет данные сессии в шестнадцатеричном формате)

Сохраняет данные сессии в шестнадцатеричном формате в файл.

--append-output (Дописывает вывод)

Запустите Ncat с --append-ouput вместе с -o и/или -x и она будет добавлять результирующий вывод вместо усечения указанных файлов вывода.

-v, --verbose (Быть вербальной)

Запустите Ncat с -v и она будет вербальной и отобразит всякого рода полезную информацию о подключении. Использование более чем одного раза (-vv, -vvv…) увеличит вербальность.

Прочие опции

-C, --crlf (Использовать CRLF как EOL)

Эта опция говорит Ncat конвертировать окончание строки LF в CRLF когда принимается ввод из стандартного ввода. Это полезно для разговора с некоторыми строгими серверами напрямую из терминала по одному из многих протоколов в виде простого текста, которые используют CRLF в качестве конца строки (end-of-line).

-h, --help (Справка)

Показывает короткую справку с популярными опциями и параметрами, а затем выходит.

--recv-only (Только получать данные)

--send-only (Только отправлять данные)

Если эта опция передана, тогда Ncat будет только отправлять данные и будет игнорировать всё полученное. Эта опция также приводит к тому, что Ncat закроет сетевое соединение и завершит работу после получения по стандартному вводу EOF.

--no-shutdown (Без отключения и полудуплексный режим)

-t, --telnet (Отвечать на переговоры Telnet)

Обрабатывает переговоры Telnet DO/DONT WILL/WONT Telnet. Это делает возможным скриптовать Telnet сессии с Ncat.

--version (Показать версию)

Показать номер версии Ncat и выйти.

Доменные сокеты Unix (Unix domain sockets)

Опция -U (то же самое что и --unixsock) приводит к тому, что Ncat начинает использовать доменные сокеты Unix (Unix domain sockets), а не сетевые сокеты. Доменные сокеты Unix существуют в качестве записей в файловой системе. Вы должны передать имя сокета для подключения или для прослушивания. Например, чтобы сделать подключение:

Для прослушивания на сокете:

Режим прослушивания создаст сокет, если он не существует. Сокет продолжит существование после выхода из программы.

Поддерживаются оба типа: потоковые и датаграмнные доменные сокеты. Используйте -U саму по себе для потоковых сокетов или комбинируйте её с --udp для датаграмнных сокетов. Датаграмнные сокеты требует исходный сокет для подключения. По умолчанию, если нужно, будет создан исходный сокет с произвольным именем файла; при выходе из программы он будет удалён. Используйте --source с указанием пути для задействования сокета с определённым именем.

Код выхода

Код выхода отражает, было ли сделано соединение и завершено успешно. 0 означает, что ошибок не было, 1 означает, что произошла какого-то рода ошибка сети, например, “Connection refused” (В соединение отказано) или “Connection reset” (Соединение сброшено). 2 зарезервирована для всех других ошибок, таких как неверная опция или несуществующий файл.

Примеры запуска Ncat

Прослушивать входящие соединения используя протокол TCP на порту 8080:

Прослушивать порт 8081 и прикрепить /bin/bash для исполнения переданных команд:

Привязать шелл (оболочку) к TCP порту 8081, ограничить доступ к хостам из локальной сети и ограничить максимальное число одновременных подключений на тремя:

Подключиться к smtphost:25 через сервер SOCKS4 на порту 1080:

Подключиться к smtphost:25 через сервер SOCKS5 на порту 1080:

Установка Ncat

Установка в Kali Linux

Установка в BlackArch

Программа предустановлена в BlackArch.

Установка в Debian, Ubuntu, Linux Mint и их производные

Информация об установке в другие операционные системы будет добавлена позже.

Favorite

Добавить в избранное (1 оценок, среднее: 5,00 из 5)

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

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

Синтаксис Netcat

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

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

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

Сканирование портов

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

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

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

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

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

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

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

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

Отправка файлов через Netcat

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

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

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

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

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

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

Создание простого сервера чата

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

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

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

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

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

Заключение

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

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

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

image


В данной статье я рассмотрю популярную сетевую утилиту netcat и полезные трюки при работе с ней.

Netcat — утилита Unix, позволяющая устанавливать соединения TCP и UDP, принимать оттуда данные и передавать их. Несмотря на свою полезность и простоту, многие не знают способы ее применения и незаслуженно обходят ее стороной.

С помощью данной утилиты можно производить некоторые этапы при проведении тестирования на проникновение. Это может быть полезно, когда на атакованной машине отсутствуют (или привлекут внимание) установленные пакеты, есть ограничения (например IoT/Embedded устройства) и т.д.

Что можно сделать с помощью netcat:

Вообще с помощью netcat можно заменить часть unix утилит, поэтому этот инструмент можно считать неким комбайном для выполнения тех или иных задач.

Практические примеры

Во многих случаях при необходимости проверки того или иного хоста используют телнет, либо собственные сервисные службы для выявления хоста или баннера. Как нам может помочь netcat:

Проверка наличия открытого TCP-порта 12345

nc: connect to 192.168.1.100 12345 (tcp) failed: Connection refused
Connection to 192.168.1.100 22 port [tcp/ssh] succeeded!
SSH-2.0-OpenSSH

Сканирование TCP-портов с помощью netcat:

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

nc: connectx to 192.168.1.100 port 20 (tcp) failed: Connection refused
nc: connectx to 192.168.1.100 port 21 (tcp) failed: Connection refused
found 0 associations
found 1 connections:
1: flags=82<CONNECTED,PREFERRED>
outif en0
src 192.168.1.100 port 50168
dst 192.168.1.100 port 22
rank info not available
TCP aux info available
Connection to 192.168.1.100 port 22 [tcp/*] succeeded!
nc: connectx to 192.168.1.100 port 23 (tcp) failed: Connection refused
nc: connectx to 192.168.1.100 port 24 (tcp) failed: Connection refused

Сканирование UDP-портов.

Для сканирования UDP портов с помощью nmap необходимы root привилегии. Если их нет — в этом случае нам тоже может помочь утилита netcat:

Отправка UDP-пакета

Это может быть полезно при взаимодействии с сетевыми устройствами.

Прием данных на UDP-порту и вывод принятых данных

Передача файлов. С помощью netcat можно как получать файлы, так и передавать на удаленный хост:

Netcact в роли простейшего веб-сервера.

Netcat может выполнять роль простейшего веб-сервера для отображения html странички.

Чат между узлами

На первом узле (192.168.1.100):

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

Реверс-шелл

С помощью netcat можно организовать удобный реверс-шелл:

Теперь можно соединиться с удаленного узла:

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

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

Пакет Netcat предварительно установлен в macOS и популярных дистрибутивах Linux, таких как Ubuntu, Debian или CentOS.

Синтаксис Netcat

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

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

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

Сканирование портов

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

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

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

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

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

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

Чтобы сканировать порты UDP, просто добавьте к команде параметр -u как показано ниже:

Отправка файлов через Netcat

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

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

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

От отправляющего хоста подключитесь к принимающему хосту и отправьте файл:

Чтобы передать каталог, вы можете использовать tar для архивации каталога на исходном хосте и для извлечения архива на целевом хосте.

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

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

Создание простого чат-сервера

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

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

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

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

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

Выводы

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

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

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

Linux славится наличием множества полезных и функциональных утилит командной строки, штатно доступных в большинстве дистрибутивов. Опытный системный администратор может выполнить значительную часть своей работы при помощи встроенных инструментов без необходимости устанавливать дополнительные программы.
В данном руководстве мы разберем использование утилиты netcat. Ее часто называют «швейцарским армейским ножом» среди сетевых инструментов. Это действительно универсальная команда, которая может помочь вам в мониторинге и тестировании сетевых соединений, а также в отправке данных через них. В примерах рассматривается BSD-версия netcat, которая по умолчанию входит в дистрибутив Ubuntu. Работа других версий и их опции могут немного отличаться.

netcat синтаксис

По умолчанию netcat инициирует TCP-соединение с удаленным узлом.
Базовый синтаксис команды следующий:

Команда попытается установить TCP-соединение с указанным узлом и номером порта. В принципе, это работает аналогично старой команде telnet в Linux. Имейте в виду, что ваше соединение будет не зашифровано.

Также можно задать диапазон портов, указав начальный и конечный порты через дефис:

Обычно в таких командах указываются дополнительные флаги, мы рассмотрим их ниже.
В большинстве систем команды netcat и nc взаимозаменяемы и означают одну и ту же утилиту.

netcat опции

Для команды существуют следующие ключи-опции

-h Справка;
-v Вывод информации о процессе работы (verbose)
-o <выходной_файл> Вывод данных в файл
-i <число> Задержка между отправляемыми данными (в секундах)
-z Не посылать данные (сканирование портов)
-u Использовать для подключения UDP протокол
-l Режим прослушивания
-p <число> Локальный номер порта для прослушивания. Используется с опцией -l
-s <host> Использовать заданный локальный («свой») IP-адрес
-n Отключить DNS и поиск номеров портов по /etc/services
-w <число> Задать тайм-аут (в секундах)
-q <число> Задать время ожидания после передачи данных, после истечение которого соединение закрывается

netcat примеры

Для лучшего понимания как работает netcat рассмотрим несколько примеров

Сканирование портов

Один из наиболее распространенных примеров использования netcat – сканирование портов. Может быть, это не самый продвинутый инструмент (в большинстве случаев лучше воспользоваться nmap), но он позволяет выполнить простое сканирование и легко выявить открытые порты. Для этого нужно указать диапазон портов и опцию –z, которая означает выполнение сканирования вместо попытки установить соединение. Например, следующая команда сканирует порты от 1 до 1000:

Помимо опции -z, мы указали опцию –v, чтобы команда выводила более подробную информацию. Результат будет выглядеть следующим образом:

Как мы видим, для каждого порта указано, успешно ли прошло сканирование. Единственный открытый порт на удаленном компьютере – 22, традиционно используемый для SSH.

Можно ускорить процесс сканирования, если вам известен IP-адрес узла. Он указывается с опцией –n, которая задает команде не определять адрес при помощи DNS.

Связь при помощи Netcat

Функции Netcat не ограничены отправкой TCP и UDP пакетов. Она также может прослушивать порты. Это позволяет создать соединение между программами netcat на различных компьютерах по принципу «клиент-сервер». Роли сервера и клиента важны только при первоначальной конфигурации. После установки соединения связь в обоих направлениях будет абсолютно одинаковой. На одной из машин нужно указать команде netcat прослушивать определенный порт. Это осуществляется при помощи опции –l:

Данная команда выполняет прослушивание порта 4444 в ожидании TCP-соединения. Если вы обычный пользователь без root-привилегий, то открывать порты до 1000 вам нельзя из соображений безопасности. Вторую машину можно подключить к первой точно так же, как мы устанавливали соединения ранее, указав тот же номер порта:


так и на удаленном экране.


Отправка файлов

Взяв за основу предыдущий пример, можно выполнять более сложные задачи.
Мы установили обычное TCP-соединение, поэтому можем отправлять по нему практически любые данные, не ограниченные вводимым пользователем текстом. Таким образом, можно использовать netcat в качестве средства передачи файлов.
Нам снова потребуется задать прослушивание порта на одном конце. Однако, вместо вывода информации на экран, как в предыдущем примере, мы будем направлять ее сразу в файл:

На втором компьютере создадим простой текстовый файл:

Теперь этот файл можно использовать в качестве источника входных данных netcat для соединения с прослушивающим компьютером. Файл будет передан точно так же, как будто мы его ввели сами:

В этом примере нет никакой магии, мы просто используем стандартный способ перенаправления потоков

На ожидавшем соединения компьютере появится новый файл с названием «received_file» и содержимым, введенным на другой машине. Это можно проверить при помощи команды cat:

При помощи конвейеров мы легко можем передать по этому соединению совершенно любые данные.
Например, можно передать содержимое всей директории: создать безымянный tar-архив прямо на ходу, передать его удаленной системе и распаковать в удаленную директорию. Следующей командой мы можем задать на приемном конце ожидание файла, которому потребуется распаковка и извлечение:

В данном случае дефис в команде tar задает упаковку содержимого текущей директории (указано маской *) с выводом результатов в стандартный поток вывода. Затем он перенаправляется непосредственно на TCP-соединение, отправляется на другой конец, где распаковывается в текущую директорию на удаленном компьютере. Это всего лишь один из примеров передачи более сложных данных между компьютерами. Другой распространенный вариант – воспользоваться командой dd для создания образа диска на одном конце соединения и передать его на удаленный компьютер.

Использование Netcat в качестве простого веб-сервера

Сначала создадим на одном из компьютеров HTML-файл с помощью nano:

Введем в него простой HTML-код:

Теперь нужно сохранить и закрыть файл.

Без root-привилегий этот файл нельзя передать через веб-порт по умолчанию, 80. Для примера воспользуемся другим номером порта, допустим, 8888. Если страницу нужно передать один раз для проверки ее вида, можно запустить следующую команду:

Теперь можно просмотреть эту страницу в браузере:



Но можно задать netcat бесконечную передачу страницы, заключив предыдущую команду в бесконечный цикл, например:

Это позволит продолжать ожидание соединения после закрытия. Остановить цикл можно комбинацией клавиш Ctrl+C.
Данный прием можно использовать для проверки представления страницы в браузере, но никаких других функций он не обеспечивает. Им нельзя пользоваться для отображения реальных веб-сайтов – это небезопасно, и будут некорректно работать даже такие простые элементы, как ссылки.

Заключение

Надеемся, вы получили достаточное представление о том, как и для чего можно использовать netcat. Это универсальный инструмент, полезный для диагностики проблем и проверки корректности работы базового уровня TCP/UDP соединений. Он позволяет легко и быстро устанавливать связь между компьютерами. Для более подробной информации можно ознакомиться с man-страницей команды.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Читайте также: