Как использовать Netcat Linux

Обновлено: 21.11.2024

Linux известен тем, что в большинстве дистрибутивов имеется большое количество готовых полезных утилит командной строки. Часто системные администраторы могут выполнять большую часть своей работы с помощью встроенных инструментов без установки дополнительного программного обеспечения.

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

Netcat должен быть доступен практически в любом современном дистрибутиве Linux. Ubuntu поставляется с вариантом netcat для BSD, и именно его мы будем использовать в этом руководстве. Другие версии могут работать иначе или предоставлять другие параметры.

Общий синтаксис

По умолчанию netcat инициирует TCP-соединение с удаленным хостом.

Самый простой синтаксис:

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

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

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

Обычно используется с некоторыми дополнительными флагами.

В большинстве систем мы можем использовать как netcat, так и nc взаимозаменяемо. Это псевдонимы одной и той же команды.

Как использовать Netcat для сканирования портов

Одним из наиболее распространенных способов использования netcat является сканер портов.

Хотя netcat, вероятно, не самый сложный инструмент для этой работы (в большинстве случаев лучше использовать nmap), он может выполнять простое сканирование портов, чтобы легко идентифицировать открытые порты.

Мы делаем это, указав диапазон портов для сканирования, как мы сделали выше, вместе с параметром -z для выполнения сканирования вместо попытки инициировать соединение.

Например, мы можем просканировать все порты до 1000, введя эту команду:

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

Вывод будет выглядеть следующим образом:

Как видите, это предоставляет много информации и сообщает вам для каждого порта, было ли сканирование успешным или нет.

Если вы действительно используете доменное имя, вам придется использовать эту форму.

Однако сканирование будет проходить намного быстрее, если вы знаете нужный IP-адрес. Затем вы можете использовать флаг -n, чтобы указать, что вам не нужно разрешать IP-адрес с помощью DNS:

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

Мы будем перенаправлять стандартную ошибку на стандартный вывод, используя синтаксис bash 2>&1. Затем мы отфильтруем результаты с помощью grep :

Здесь мы видим, что единственным открытым портом в диапазоне 1–1000 на удаленном компьютере является порт 22, традиционный порт SSH.

Как общаться через Netcat

Netcat не ограничивается отправкой пакетов TCP и UDP. Он также может прослушивать порт для соединений и пакетов. Это дает нам возможность соединить два экземпляра netcat в отношениях клиент-сервер.

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

На одной машине вы можете указать netcat прослушивать определенный порт для соединений. Мы можем сделать это, указав параметр -l и выбрав порт:

Это укажет netcat прослушивать TCP-подключения на порту 4444. Как обычный пользователь (без полномочий root) вы не сможете открывать порты ниже 1000 в целях безопасности.

На втором сервере мы можем подключиться к первому компьютеру через выбранный нами номер порта. Мы делаем это так же, как раньше устанавливали соединения:

Это будет выглядеть так, как будто ничего не произошло. Однако теперь вы можете отправлять сообщения на любой стороне соединения, и они будут видны на любом конце.

Введите сообщение и нажмите ENTER . Он появится как на локальном, так и на удаленном экране. Это работает и в обратном направлении.

Когда вы закончите передачу сообщений, вы можете нажать CTRL-D, чтобы закрыть TCP-соединение.

Как отправлять файлы через Netcat

Опираясь на предыдущий пример, мы можем выполнять более полезные задачи.

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

И снова нам нужно выбрать один конец соединения для прослушивания подключений.Однако вместо того, чтобы выводить информацию на экран, как в предыдущем примере, мы поместим всю информацию прямо в файл:

Кнопка > в этой команде перенаправляет весь вывод netcat в файл с указанным именем.

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

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

На компьютере, ожидавшем подключения, мы видим, что теперь у нас есть новый файл с именем receive_file с содержимым файла, который мы набрали на другом компьютере:

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

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

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

Конечный дефис (-) означает, что tar будет работать со стандартным вводом, который передается от netcat по сети при установлении соединения.

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

На этот раз тире в команде tar означает архивирование и архивирование содержимого текущего каталога (как указано подстановочным знаком *) и запись результата в стандартный вывод.

Затем это записывается непосредственно в соединение TCP, которое затем принимается на другом конце и распаковывается в текущий каталог удаленного компьютера.

Это всего лишь один пример переноса более сложных данных с одного компьютера на другой. Другая распространенная идея — использовать команду dd для создания образа диска на одной стороне и передачи его на удаленный компьютер. Однако мы не будем обсуждать это здесь.

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

Мы настроили netcat для прослушивания подключений для связи и передачи файлов. Мы можем использовать ту же концепцию, чтобы использовать netcat в качестве очень простого веб-сервера. Это может быть полезно для тестирования создаваемых вами страниц.

Сначала создадим простой файл HTML на одном сервере:

Вот простой HTML-код, который вы можете использовать в своем файле:

Сохраните и закройте файл.

Без привилегий root вы не можете обслуживать этот файл через веб-порт по умолчанию, порт 80. Мы можем выбрать порт 8888 как обычный пользователь.

Если вы хотите просмотреть эту страницу только один раз, чтобы проверить, как она отображается, вы можете запустить следующую команду:

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

Это будет обслуживать страницу, а затем соединение netcat будет закрыто. Если вы попытаетесь обновить страницу, она исчезнет:

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

Это позволит ему продолжать получать соединения после закрытия первого соединения.

Мы можем остановить цикл, нажав CTRL-C на сервере.

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

Заключение

Теперь у вас должно быть довольно хорошее представление о том, для чего можно использовать netcat. Это универсальный инструмент, который может быть полезен для диагностики проблем и проверки правильности работы функций базового уровня с соединениями TCP/UDP.

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

Хотите узнать больше? Присоединяйтесь к сообществу DigitalOcean!

Присоединяйтесь к нашему сообществу DigitalOcean, насчитывающему более миллиона разработчиков, бесплатно! Получайте помощь и делитесь знаниями в нашем разделе "Вопросы и ответы", находите руководства и инструменты, которые помогут вам расти как разработчику и масштабировать свой проект или бизнес, а также подписывайтесь на интересующие вас темы.

При его разработке учитывалось, что это должен быть гибкий «внутренний» инструмент, который можно использовать напрямую или с помощью любой другой программы.

Установка средства мониторинга процессов netcat(nc)

Для установки инструмента Netcat используйте следующие команды в соответствии с вашим дистрибутивом Linux.

В случае Debian/Ubuntu

В случае CentOS/RHEL

В случае Fedora 22+ и RHEL 8

Работа с инструментом безопасности netcat

<р>1. Чтобы начать прослушивание порта, сначала откройте 2 окна терминала.

Терминал 1 для прослушивания

Терминал 2 отправляет запрос

Примечание. Здесь номер порта — 1234, а хост по умолчанию — localhost.

Он ничего не отобразит, но начнет прослушивать порт 1234 на локальном хосте с терминала 1. И все, что введено в терминале 2, также будет отражено обратно в терминале 1, что подтверждает, что соединение установлено успешно.

<р>2. Для передачи данных. Откройте 2 окна терминала.

Терминал 1 для прослушивания

Терминал 2 для отправки запроса

Примечание. Здесь номер порта — 1234, а хост по умолчанию — localhost. Он отправит данные файла input.txt с терминала 2 в файл output.txt на терминале 1.

<р>3. Для выполнения сканирования портов. Введите следующую команду на терминале.

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

Сканирование нескольких портов

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

Примечание. Здесь указаны номера портов 1234, 1235, 1233 и 1240. Вы можете изменить их по своему усмотрению. Он отобразит номер порта со статусом (открыт или нет).

<р>5. Для задержки интервала для отправляемых строк. Откройте терминал 2, как показано ниже:

Терминал 1 для прослушивания

Терминал 2 отправляет запрос

Примечание. Здесь номер порта — 1234, а хост по умолчанию — localhost. Затраченное время составляет 5 секунд. Каждый будет отправлен через 5 секунд.

Команда Nc или Netcat — это сетевой инструмент командной строки в Linux. Он работает как инструмент сканирования портов, инструмент безопасности или инструмент мониторинга сети. Это важная утилита, о которой должны знать системные администраторы. Ее часто называют швейцарским армейским ножом среди сетевых инструментов.

Команду netcat можно использовать для следующих целей:

  • Сканирование портов
  • Копирование файлов через сервер
  • Создание сервера чата из командной строки
  • Переадресация портов
  • Создание прокси-серверов
  • Получение информации о баннере с удаленных компьютеров
  • Размещение веб-серверов
  • Создание бэкдоров

Установка команды Netcat

Во-первых, в большинстве систем Ubuntu Netcat доступен в виде установленного пакета, но если это не так, вы можете загрузить его с помощью следующей команды:

Режимы работы

Существует два режима работы с использованием nectat: в качестве Клиента или в качестве Сервера.

Синтаксис для двух режимов может быть представлен следующим образом:

прослушивать входящие: (сервер)

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

При использовании Netcat для прослушивания входящих подключений машина действует как сервер. -l означает прослушивание.

Сканирование портов с помощью Netcat

Одним из самых простых и распространенных способов использования Netcat является определение открытых портов. Для сканирования портов используются три основных флага:

< td>-v
-zВключает nc сканировать прослушивающие демоны, не отправляя им никаких данных
Включает подробный режим
-wИспользуется, когда необходимо указать условие тайм-аута

Существует три способа указать порты для прослушивания:

Прослушивание одного порта:

Прослушивание нескольких портов:

Прослушивание диапазона портов:

прослушивание нескольких портов

Копирование файлов с помощью команды Netcat в Linux

Команду netcat можно использовать для передачи файла из одной системы в другую, даже если она устарела по сравнению с ssh/scp. Это можно сделать с помощью следующих команд.

Это работает путем отправки информации о файле с компьютера-источника на компьютер-получатель по каналу. Принимающая машина работает в режиме прослушивания и прослушивает данные через определенный порт. Отправляющая машина отправляет данные, создавая соединение с получателем. При этом создается модель сервер-клиент с использованием Netcat.

Операторы перенаправления используются для записи в файлы и из файлов.

На прослушивающей машине (назначение):

На отправляющем компьютере (источник):

Если вы не укажете файлы и операторы перенаправления, то те же самые команды будут работать как модель чата. Мы увидим это дальше:

Сервер чата командной строки с использованием NC

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

Выполните команду на одном из серверов:

На удаленном компьютере для подключения используйте следующую команду:

Это установит соединение, и все, что написано на одном терминале, будет отображаться на другом.

Это будет работать в обе стороны.

Запуск двух экземпляров терминала и создание сервера чата между ними:

чат через Netcat

чат через Netcat

Изменение режима подключения к UDP

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

Это можно сделать с помощью параметра «-u» в команде Netcat.

*TCP означает протокол управления передачей, а UDP – дейтаграмма, определяемая пользователем.

UDP

Подключается к порту 55 UDP. Мы можем видеть, что тип соединения — UDP вместо TCP, используя опцию «-v»:

Проверка UDP

Вы можете использовать это для создания сервера чата UDP, используя -u в приведенном выше примере с сервером чата. С той лишь разницей, что теперь для обмена будет использоваться протокол UDP вместо TCP.

Захват баннеров

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

Вы также можете использовать CONNECT, DELETE, DEBUG, OPTIONS, GET вместо HEAD.

после написания второй строки несколько раз нажмите Enter.

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

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

Команда для создания сервера:

Чтобы сделать это двумя способами, мы используем :

Команда mkfifo в Linux используется для создания каналов. Каналы по своей природе работают в порядке очереди (fifo) и в основном помогают двум процессам в Linux взаимодействовать.

2wayPipe — имя пайпа, которое мы выбрали произвольно.

Это обеспечивает возможность отправки и получения информации через прокси-сервер Netcat.

Создание базового веб-сервера

Допустим, есть простой HTML-файл, который вы хотите разместить. В вашей системе этот файл называется index.html. Затем вы можете использовать следующую команду для создания локального сервера Netcat и размещения HTML-файла. Мы будем использовать цикл while в сценариях оболочки, чтобы убедиться, что сервер продолжает прослушивать порт 8080 и обслуживать нашу страницу index.html для каждого запроса.

Переключение между IPV6 и IPV4

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

-4Разрешить только адреса IPV4
-6Разрешить только адреса IPV6

Например, в нашей модели чата командной строки выше мы можем использовать один из этих флагов для подключения к IPv4 или IPv6, как показано ниже.

Команда Netcat (nc) — это мощный инструмент для анализа сетевых подключений, сканирования открытых портов, передачи данных и т. д. Это сетевая утилита для чтения и записи в сетевые подключения с использованием протоколов TCP или UDP.

Как установить netcat

Это кроссплатформенный инструмент, доступный для Linux, macOS, Windows и BSD. Мы собираемся установить netcat на Ubuntu 18.04, используя apt install или компилируя его из исходного кода.

Установка с помощью apt довольно проста, вам просто нужно ввести в терминале следующую команду:

В CentOS 8

ncat можно установить с пакетом nmap на RHEL 8/CentOS 8. Используйте команду dnf, как показано ниже

Как установить netcat из исходного кода

Скомпилировать netcat из исходного кода не так просто, как установить с помощью apt install , но если вы выполните следующие шаги, вы сможете легко установить его.

Загрузите исходный код с веб-сайта netcat с помощью следующей команды

Извлеките только что загруженный архив. Для этого вы можете запустить:

перейдите в каталог, содержащий исходный код пакета, и введите ./configure, чтобы настроить пакет для вашей системы.

Если при выполнении команды ./configure вы получаете сообщение об ошибке "не найден приемлемый компилятор C в $PATH", убедитесь, что у вас установлен компилятор gcc. Чтобы установить его, введите следующую команду:

Запуск configure занимает некоторое время.

После успешного завершения настройки запустите:

Вы можете удалить двоичные файлы программы и объектные файлы из каталога исходного кода, набрав make clean . Чтобы также удалить созданные файлы configure, запустите команду make distclean.

Примеры Netcat

Прежде чем приступить к изучению некоторых команд netcat, важно знать, что если вы выполняете привязку к широко известным портам (0–1023) с помощью nc, вам потребуются привилегии root. В противном случае вы можете запустить nc как обычный пользователь.

1) Проверить, открыт ли конкретный TCP-порт удаленного хоста

Вывод, если порт 2424 на удаленном сервере закрыт

Вывод, если порт на удаленном сервере открыт (например, порт 22)

2) Выполнить сканирование TCP-порта на удаленном хосте

Приведенная ниже команда проверит порты с 20 по 25 на удаленном хосте и распечатает результат.

Вывод будет выглядеть так

3) Выполнить сканирование портов UDP на удаленном хосте

Вывод покажет только те порты, которые разрешают UDP-подключения.

4) Отправить тестовый UDP-пакет на удаленный хост

Приведенная выше команда отправит тестовый пакет UDP с тайм-аутом в 1 секунду на удаленный хост через порт 2424

5) Скопируйте файл (например, test.txt) с одного хоста на другой

На принимающем хосте (в моем случае 192.168.40.146) запустите:

На хосте-отправителе (192.168.40.144) выполните следующую команду:

Это скопирует файл test.txt с хоста-отправителя на хост-получатель через порт 2424. обязательно разрешите входящие соединения через порт 2424 на принимающем хосте.

6) Перенести весь каталог (включая его содержимое) с одного хоста на другой

На принимающем хосте:

На хосте-отправителе выполните следующую команду:

7) Создайте сжатую резервную копию жесткого диска (например, /dev/sdc) на удаленном хосте

На удаленном хосте:

На локальном хосте выполните следующую команду:

8) Восстановить жесткий диск (например, /dev/sdc) из сжатого образа диска, хранящегося на удаленном хосте

На локальном хосте:

На удаленном хосте выполните следующую команду:

9) Запустить небезопасный онлайн-чат между двумя хостами

На одном хосте (например, 192.168.40.144) выполните следующую команду:

На другом хосте (например, 192.168.40.146) выполните следующую команду:

После выполнения этих команд все, что вводится в обоих терминалах, будет видно на обоих хост-компьютерах.

10) Запустите веб-сервер со статической веб-страницей

Выполните приведенную ниже команду на локальном хосте (например, 192.168.40.144), чтобы запустить веб-сервер, который обслуживает test.html через порт 80. Обратите внимание, что вы должны запускать с привилегиями sudo, поскольку 80 находится в диапазоне хорошо известных портов (1- 1023)

11) Прослушивание TCP-порта с использованием IPv6-адреса

Вы можете использовать следующую команду, чтобы разрешить nc использовать IPv6-адрес при прослушивании TCP-порта.

Проверьте, работает ли это с помощью приведенной ниже команды

Вывод будет выглядеть так

12) Потоковая передача видеофайла с сервера для просмотра клиентом потокового видео с помощью видеопроигрывателя (например, mplayer)

На видеосервере (192.168.40.144):

На клиентском хосте (192.168.40.146):

nc 192.168.40.144 2424 | mplayer -vo x11 -cache 3000 -

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

Как видите, netcat — отличный инструмент для работы в сетях TCP/IP и один из самых любимых инструментов системных администраторов, когда дело доходит до устранения неполадок и экспериментов, связанных с сетью. Вот почему многие дистрибутивы Linux поставляются с предустановленным netcat.

слаг; $list = get_page_by_title('related', 'OBJECT', 'wp_show_posts'); wpsp_display($list->ID, 'tax_term="' . $cat_slug . '"' );*/ ?>

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