Как читать и записывать данные по сети с помощью Netcat в Linux

12 set 2022 3 min di lettura
Как читать и записывать данные по сети с помощью Netcat в Linux
Indice dei contenuti

Введение

Netcat (или nc) — это утилита командной строки, которая считывает и записывает данные через сетевые соединения, используя протоколы TCP или UDP. Это один из самых мощных инструментов в сети и арсенале системных администраторов, который считается швейцарским армейским ножом среди сетевых инструментов.

Netcat является кроссплатформенным и доступен для Linux, macOS, Windows и BSD. Вы можете использовать Netcat для отладки и мониторинга сетевых подключений, поиска открытых портов, передачи данных, таких как прокси-серверы, и многого другого. Пакет Netcat предустановлен в macOS и популярных дистрибутивах Linux, таких как Ubuntu.

Синтаксис Netcat

Простейший синтаксис утилиты Netcat имеет следующий вид:

nc [options] host port

В Ubuntu вы можете использовать netcat или nc. Обе они являются символическими ссылками на версию Netcat для openBSD.

По умолчанию Netcat попытается инициировать TCP-соединение с указанным хостом и портом. Если вы хотите установить UDP-соединение, используйте параметр -u:

nc -u host port

Сканировать порты

Сканирование портов — одно из наиболее распространенных применений Netcat. Вы можете сканировать один порт или диапазон портов.

Например, для поиска открытых портов в диапазоне 20-80 заданного IP-адреса используйте следующую команду:

nc -z -v 10.10.8.8 20-80

Опция -z укажет команде nc искать только открытые порты, не отправляя им никаких данных, а опция -v предоставит более подробную информацию.

Вывод будет выглядеть следующим образом:

nc: connect to 10.10.8.8 port 20 (tcp) failed: Connection refused
 nc: connect to 10.10.8.8 port 21 (tcp) failed: Connection refused
 Connection to 10.10.8.8 22 port [tcp/ssh] succeeded!
 nc: connect to 10.10.8.8 port 23 (tcp) failed: Connection refused...
 nc: connect to 10.10.8.8 port 79 (tcp) failed: Connection refused
 Connection to 10.10.8.8 80 port [tcp/http] succeeded!

Если вы хотите напечатать только строки с открытыми портами, вы можете отфильтровать результаты с помощью команды grep:

nc -z -v 10.10.8.8 20-80 2>&1 | grep succeeded

Вывод будет выглядеть следующим образом:

Connection to 10.10.8.8 22 port [tcp/ssh] succeeded!
 Connection to 10.10.8.8 80 port [tcp/http] succeeded!

Вы также можете использовать Netcat, чтобы найти серверное программное обеспечение и его версию. Например, если вы отправляете команду «ВЫХОД» на сервер через SSH-порт 22 по умолчанию:

echo "EXIT" | nc 10.10.8.8 22

Вывод будет выглядеть следующим образом:

SSH-2.0-OpenSSH_7.6p1 Ubuntu-4
 Protocol mismatch.

Для поиска портов UDP просто добавьте параметр -u к команде, как показано ниже:

nc -z -v -u 10.10.8.8 20-80

В большинстве случаев Nmap является лучшим инструментом, чем Netcat, для сканирования сложных портов.

Отправка файлов через Netcat

Netcat можно использовать для передачи данных с одного хоста на другой, создав базовую модель клиент/сервер.

Он работает, настраивая Netcat на прослушивание определенного порта с помощью параметра -l на принимающем хосте, а затем устанавливая обычное TCP-соединение с другого хоста и отправляя файл на него.

На принимающем хосте выполните следующую команду, которая откроет порт 5555 для входящего соединения и перенаправит вывод в файл example.txt:

nc -l 5555 > esempio.txt

На отправляющем хосте подключитесь к принимающему хосту и отправьте файл:

nc host_ricevente.com 5555 < esempio.txt

Чтобы передать каталог, вы можете использовать tar для архивирования каталога на исходном хосте и извлечения архива на целевом хосте.

На хосте-получателе настройте инструмент Netcat для прослушивания входящего соединения через порт 5555. Входящие данные отправляются команде tar, которая распаковывает архив:

nc -l 5555 | tar xzvf -

На хосте-отправителе сожмите каталог и отправьте данные, подключившись к процессу прослушивания nc на хосте-получателе:

tar czvf - /path/to/dir | nc receiving.host.com 5555

Вы можете видеть ход передачи на обоих хостах. После завершения введите CTRL+C, чтобы закрыть соединение.

Создание простого чат-сервера

Процедура создания онлайн-чата между двумя и более хостами такая же, как и при передаче файлов.

На первом хосте запустите процесс Netcat для прослушивания порта 5555:

nc -l 5555

Со второго хоста выполните следующую команду, чтобы подключиться к порту прослушивания:

nc first.host.com 5555

Теперь, если вы наберете сообщение и нажмете ENTER, оно будет отображаться на обоих хостах.

Чтобы закрыть соединение, CTRL+C

Сделать HTTP-запрос

Хотя есть гораздо лучшие инструменты для HTTP-запросов, такие как curl, вы также можете использовать Netcat для отправки различных запросов на удаленные серверы.

Например, чтобы получить справочную страницу Netcat с веб-сайта OpenBSD, введите:

printf "GET /nc.1 HTTP/1.1\r\nHost: man.openbsd.org\r\n\r\n" | nc man.openbsd.org 80

Полный ответ, включая заголовки HTTP и код HTML, будет напечатан в терминале.

Вывод

В этом руководстве вы узнали, как использовать утилиту Netcat для установки и тестирования соединений TCP и UDP.

Для получения дополнительной информации посетите справочную страницу Netcat и ознакомьтесь со всеми другими мощными параметрами команды Netcat.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.