- Утилита netcat в Linux
- netcat синтаксис
- netcat опции
- netcat примеры
- Сканирование портов
- Связь при помощи Netcat
- Отправка файлов
- Использование Netcat в качестве простого веб-сервера
- Заключение
- Команда Netcat (nc) с примерами
- Синтаксис Netcat
- Сканирование портов
- Отправка файлов через Netcat
- Создание простого чат-сервера
- Выполнение HTTP-запроса
- Выводы
- Установка NetCat на Windows
- Виртуальный сервер на базе Windows
- Что это такое
- Установка
- Примеры использования
Утилита netcat в Linux
Linux славится наличием множества полезных и функциональных утилит командной строки, штатно доступных в большинстве дистрибутивов. Опытный системный администратор может выполнить значительную часть своей работы при помощи встроенных инструментов без необходимости устанавливать дополнительные программы.
В данном руководстве мы разберем использование утилиты netcat. Ее часто называют «швейцарским армейским ножом» среди сетевых инструментов. Это действительно универсальная команда, которая может помочь вам в мониторинге и тестировании сетевых соединений, а также в отправке данных через них. В примерах рассматривается BSD-версия netcat, которая по умолчанию входит в дистрибутив Ubuntu. Работа других версий и их опции могут немного отличаться.
netcat синтаксис
По умолчанию netcat инициирует TCP-соединение с удаленным узлом.
Базовый синтаксис команды следующий:
Команда попытается установить TCP-соединение с указанным узлом и номером порта. В принципе, это работает аналогично старой команде telnet в Linux. Имейте в виду, что ваше соединение будет не зашифровано.
Если вместо установки TCP-соединения вам нужно отправить UDP-пакет, можно воспользоваться опцией –u:
Также можно задать диапазон портов, указав начальный и конечный порты через дефис:
Обычно в таких командах указываются дополнительные флаги, мы рассмотрим их ниже.
В большинстве систем команды netcat и nc взаимозаменяемы и означают одну и ту же утилиту.
netcat опции
Для команды существуют следующие ключи-опции
-h Справка;
-v Вывод информации о процессе работы (verbose)
-o Вывод данных в файл
-i Задержка между отправляемыми данными (в секундах)
-z Не посылать данные (сканирование портов)
-u Использовать для подключения UDP протокол
-l Режим прослушивания
-p Локальный номер порта для прослушивания. Используется с опцией -l
-s Использовать заданный локальный («свой») 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 вам нельзя из соображений безопасности. Вторую машину можно подключить к первой точно так же, как мы устанавливали соединения ранее, указав тот же номер порта:
После выполнения этой команды на первый взгляд ничего не поменяется. Однако, теперь на любом конце соединения вы можете отправлять сообщения, и они будут видны на другом конце. Введите сообщение и нажмите Enter – оно появится как на локальном,
так и на удаленном экране.
Как уже говорилось, это работает в обоих направлениях. После завершения передачи сообщений для закрытия TCP-соединения можно нажать Ctrl+D.
Отправка файлов
Взяв за основу предыдущий пример, можно выполнять более сложные задачи.
Мы установили обычное TCP-соединение, поэтому можем отправлять по нему практически любые данные, не ограниченные вводимым пользователем текстом. Таким образом, можно использовать netcat в качестве средства передачи файлов.
Нам снова потребуется задать прослушивание порта на одном конце. Однако, вместо вывода информации на экран, как в предыдущем примере, мы будем направлять ее сразу в файл:
На втором компьютере создадим простой текстовый файл:
Теперь этот файл можно использовать в качестве источника входных данных netcat для соединения с прослушивающим компьютером. Файл будет передан точно так же, как будто мы его ввели сами:
В этом примере нет никакой магии, мы просто используем стандартный способ перенаправления потоков
На ожидавшем соединения компьютере появится новый файл с названием «received_file» и содержимым, введенным на другой машине. Это можно проверить при помощи команды cat:
При помощи конвейеров мы легко можем передать по этому соединению совершенно любые данные.
Например, можно передать содержимое всей директории: создать безымянный tar-архив прямо на ходу, передать его удаленной системе и распаковать в удаленную директорию. Следующей командой мы можем задать на приемном конце ожидание файла, которому потребуется распаковка и извлечение:
Дефис (-) в конце команды означает, что tar будет работать со стандартным потоком ввода, в который после установки соединения по сети будет направляться результат netcat.
На передающем конце мы можем упаковать директорию при помощи tar и воспользоваться netcat, чтобы отправить архив на удаленный компьютер:
В данном случае дефис в команде tar задает упаковку содержимого текущей директории (указано маской *) с выводом результатов в стандартный поток вывода. Затем он перенаправляется непосредственно на TCP-соединение, отправляется на другой конец, где распаковывается в текущую директорию на удаленном компьютере. Это всего лишь один из примеров передачи более сложных данных между компьютерами. Другой распространенный вариант – воспользоваться командой dd для создания образа диска на одном конце соединения и передать его на удаленный компьютер.
Использование Netcat в качестве простого веб-сервера
В предыдущих примерах мы настроили netcat для ожидания соединения, чтобы передавать сообщения и файлы. Этим же принципом можно воспользоваться, чтобы превратить netcat в простейший веб-сервер. Это полезно для тестирования создаваемых вами страниц.
Сначала создадим на одном из компьютеров HTML-файл с помощью nano:
Введем в него простой HTML-код:
Теперь нужно сохранить и закрыть файл.
Без root-привилегий этот файл нельзя передать через веб-порт по умолчанию, 80. Для примера воспользуемся другим номером порта, допустим, 8888. Если страницу нужно передать один раз для проверки ее вида, можно запустить следующую команду:
printf ‘HTTP/1.1 200 OK\n\n%s’ «$(cat index.html)» | netcat -l 8888
Теперь можно просмотреть эту страницу в браузере:
Сервер передаст страницу, а затем соединение netcat будет закрыто. Если вы обновите страницу, то получите сообщение об ошибке:
Но можно задать netcat бесконечную передачу страницы, заключив предыдущую команду в бесконечный цикл, например:
Это позволит продолжать ожидание соединения после закрытия. Остановить цикл можно комбинацией клавиш Ctrl+C.
Данный прием можно использовать для проверки представления страницы в браузере, но никаких других функций он не обеспечивает. Им нельзя пользоваться для отображения реальных веб-сайтов – это небезопасно, и будут некорректно работать даже такие простые элементы, как ссылки.
Заключение
Надеемся, вы получили достаточное представление о том, как и для чего можно использовать netcat. Это универсальный инструмент, полезный для диагностики проблем и проверки корректности работы базового уровня TCP/UDP соединений. Он позволяет легко и быстро устанавливать связь между компьютерами. Для более подробной информации можно ознакомиться с man-страницей команды.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Команда Netcat (nc) с примерами
Netcat (или nc ) — это утилита командной строки, которая считывает и записывает данные через сетевые соединения с использованием протоколов TCP или UDP. Это один из самых мощных инструментов в арсенале сетевых и системных администраторов, который считается швейцарским армейским ножом сетевых инструментов.
Netcat является кроссплатформенным и доступен для Linux, macOS, Windows и BSD. Вы можете использовать Netcat для отладки и мониторинга сетевых подключений, сканирования открытых портов, передачи данных в качестве прокси-сервера и многого другого.
Пакет Netcat предварительно установлен в macOS и популярных дистрибутивах Linux, таких как Ubuntu, Debian или CentOS.
Синтаксис Netcat
Самый простой синтаксис утилиты Netcat имеет следующий вид:
В Ubuntu вы можете использовать netcat или nc . Оба они являются символическими ссылками на версию Netcat для openBSD.
По умолчанию Netcat пытается запустить TCP-соединение с указанным хостом и портом. Если вы хотите установить UDP-соединение, используйте параметр -u :
Сканирование портов
Сканирование портов — одно из самых распространенных применений Netcat. Вы можете сканировать один порт или диапазон портов.
Например, чтобы сканировать открытые порты в диапазоне 20-80, вы должны использовать следующую команду:
Опция -z укажет nc сканировать только открытые порты, не отправляя им никаких данных, а опция -v предоставит более подробную информацию.
Результат будет выглядеть примерно так:
Если вы хотите распечатать только строки с открытыми портами, вы можете отфильтровать результаты с помощью команды grep .
Вы также можете использовать Netcat для поиска серверного программного обеспечения и его версии. Например, если вы отправляете команду «EXIT» на сервер через SSH-порт 22 по умолчанию:
Результат будет выглядеть примерно так:
Чтобы сканировать порты UDP, просто добавьте к команде параметр -u как показано ниже:
Как правило, Nmap — лучший инструмент, чем Netcat для комплексного сканирования портов.
Отправка файлов через Netcat
Netcat можно использовать для передачи данных с одного хоста на другой путем создания базовой модели клиент / сервер.
Это работает путем настройки Netcat для прослушивания определенного порта (с использованием параметра -l ) на принимающем хосте, а затем установления обычного TCP-соединения с другим хостом и отправки файла через него.
При получении выполните следующую команду, которая откроет порт 5555 для входящего соединения и перенаправит вывод в файл:
От отправляющего хоста подключитесь к принимающему хосту и отправьте файл:
Чтобы передать каталог, вы можете использовать tar для архивации каталога на исходном хосте и для извлечения архива на целевом хосте.
На принимающем хосте настройте инструмент Netcat для прослушивания входящего соединения через порт 5555. Входящие данные передаются команде tar , которая распаковывает архив:
На передающем хосте упакуйте каталог и отправьте данные, подключившись к слушающему процессу nc на принимающем хосте:
Вы можете наблюдать за процессом передачи на обоих концах. По завершении CTRL+C чтобы закрыть соединение.
Создание простого чат-сервера
Процедура создания онлайн-чата между двумя и более хостами такая же, как и при передаче файлов.
На первом хосте запустите процесс Netcat для прослушивания порта 5555:
Со второго хоста выполните следующую команду для подключения к слушающему порту:
Теперь, если вы наберете сообщение и нажмете ENTER оно будет отображаться на обоих хостах.
Чтобы закрыть соединение, введите CTRL+C
Выполнение HTTP-запроса
Хотя есть гораздо лучшие инструменты для HTTP-запросов, такие как curl , вы также можете использовать Netcat для отправки различных запросов на удаленные серверы.
Например, чтобы получить справочную страницу Netcat с веб-сайта OpenBSD, вы должны ввести:
Полный ответ, включая заголовки HTTP и HTML-код, будет напечатан в терминале.
Выводы
В этом руководстве вы узнали, как использовать утилиту Netcat для установления и тестирования соединений TCP и UDP.
Для получения дополнительной информации посетите страницу руководства Netcat и прочтите обо всех других мощных параметрах команды Netcat.
Если у вас есть вопросы или замечания, пожалуйста, оставьте комментарий ниже.
Установка NetCat на Windows
В этом руководстве будет рассмотрен процесс установки и использования утилиты netcat на виртуальных серверах под управлением операционной системы семейства Windows.
Виртуальный сервер на базе Windows
- Лицензия включена в стоимость
- Тестирование 3-5 дней
- Безлимитный трафик
Что это такое
Netcat — сетевая утилита, которую часто называют “Швейцарским армейским ножом”, используется для чтения или записи по TCP и UDP соединениям, используя простой интерфейс.
Установка
Загрузите архив с утилитой.
Перейдите в каталог с загрузками и распакуйте содержимое архива в любое удобное место.
В нашем примере мы будем использовать каталог “C:\Program files\netcat”.
При перемещении Вам необходимо ввести пароль “nc”.
Содержимое каталога после перемещения файлов.
Далее откройте командную строку Windows или PowerShell. С помощью команды cd перейдите в каталог с файлами: cd ‘C:\Program files\netcat’
Запустите утилиту netcat: .\nc.exe
В поле открывшейся командной строки можно начинать работу с утилитой. Для вывода доступных опций воспользуйтесь ключом -h: nc -h
-d | detach from console, background mode | фоновый режим работы |
-e prog | inbound program to exec [dangerous!!] | программа на исполнение для обмена данными с сетью |
-g gateway | source-routing hop point[s], up to 8 | свободная маршрутизация пакета от источника по указанному маршруту, максимум 8 точек |
-G num | source-routing pointer: 4, 8, 12, … | свободная маршрутизация пакета от источника по указанному количеству указателей |
-h | this cruft | вывод справочной информации |
-i secs | delay interval for lines sent, ports scanned | задержка между отправляемыми данными в секундах |
-l | listen mode, for inbound connects | режим прослушивания порта, для входящих подключений |
-L | listen harder, re-listen on socket close | повторное прослушивание сокета закрытия |
-n | numeric-only IP addresses, no DNS | использование IP-адреса, а не DNS записи |
-o file | hex dump of traffic | вывести дамп данных |
-p port | local port number | локальный номер порта |
-r | randomize local and remote ports | cлучайные локальные и удаленные порты |
-s addr | local source address | определяет заданный IP-адрес для использования |
-t | answer TELNET negotiation | совместимость с telnet |
-u | UDP mode | режим подключения по UDP |
-v | verbose [use twice to be more verbose] | дополнительная диагностика |
-w secs | timeout for connects and final net reads | таймаут подключения в секундах |
-z | zero-I/O mode [used for scanning] | не посылать данные |
Примеры использования
На первой машине с IP-адресом X.X.X.X выполните команду nc с указанием порта, например 80.
Для Linux: nc -l -p 80
Для Windows после запуска утилиты netcat: -l -p 80
На другой машине, которая подключается, выполните команду, указав IP-адрес первой машины и порт.
Для Linux: nc X.X.X.X 80
- Получаем код страницы и дополнительную информацию с помощью GET-запроса. PS C:\Program Files\netcat> .\nc.exe
- Сканирование портов. PS C:\Program Files\netcat> .\nc.exe PS C:\Program Files\netcat> .\nc.exe
- Чат-сервер
Для Windows: X.X.X.X 80
В пустой строке начинайте писать сообщение, после нажатия Enter оно будет отправлено.