Назад в блог

Утилита Netcat в Linux: тестирование соединений TCP/UDP на VPS с помощью Netcat

Утилита Netcat в Linux: тестирование соединений TCP/UDP на VPS с помощью Netcat

Введение

Одно из самых больших преимуществ использования Linux — это множество полезных утилит, которые она предоставляет. Встроенных функций обычно достаточно для большинства программистов для выполнения их работы. Это означает, что в большинстве случаев вам не нужно будет скачивать внешние программы и программное обеспечение. Встроенные инструменты предоставят вам достаточно возможностей. Среди этих полезных функций — утилита netcat.

Когда дело доходит до мира сетевых инструментов, netcat представляет собой нечто вроде сверхмощного оружия. Это невероятно универсальная команда, которую можно использовать для различных целей. Например, вы можете использовать этот единственный инструмент для мониторинга, тестирования, а также передачи всех видов файлов и данных через сетевые соединения вашей системы. В этом руководстве мы рассмотрим, как выполнить все эти действия на VPS с помощью netcat.

Поиск Netcat

Netcat обычно доступен во всех современных дистрибутивах Linux. Это означает, что, скорее всего, он у вас уже есть, и вам не нужно прилагать усилий для его установки. В нашем руководстве мы будем использовать VPS на Ubuntu 12.04. Вы можете установить собственный сервер Ubuntu, следуя нашему руководству.  Ubuntu обычно поставляется с BSD-вариантом утилиты netcat. Имейте в виду, что если у вас другая версия, она может работать немного иначе.

Обзор базового синтаксиса

Мы начнем с изучения общего синтаксиса, который используется в утилите netcat. Вы можете работать с netcat, запустив TCP-соединение. Соединение должно быть инициировано с удаленным хостом. Вот базовый синтаксис для netcat:

Эта команда попытается установить TCP-соединение с удаленным хостом. К какому хосту она подключится, зависит от номера порта, указанного вами в команде. Соединение будет незашифрованным. Как видите, эта команда работает аналогично команде telnet.

С другой стороны, вы также можете инициировать UDP-соединение. Чтобы отправить UDP-пакет вместо TCP, вам нужно использовать опцию -u. Вот как это будет выглядеть:

При желании вы также можете указать диапазон портов. Для этого нужно поставить дефис между первым и последним портом. Вот пример:

Вы также можете добавить к этому другие флаги. Еще стоит отметить, что вы можете использовать netcat и nc взаимозаменяемо. Они запускают одну и ту же команду, то есть являются псевдонимами друг друга.

Использование Netcat для сканирования портов

Для начала давайте рассмотрим одно из наиболее распространенных применений netcat. Мы разберемся, как использовать его в качестве сканера портов. В большинстве ситуаций вам лучше использовать такой инструмент, как nmap. Однако, если вам просто нужно выполнить простое сканирование портов, netcat будет весьма полезен. Он поможет вам с легкостью определить открытые порты.

Чтобы использовать netcat в качестве сканера портов, вам нужно указать диапазон портов. Вы сделаете это с помощью опции -z. Таким образом, система будет сканировать диапазон портов вместо попытки установить соединение. Допустим, мы хотим просканировать порты с 1 по 1000:

Помимо команды -z, мы также использовали опцию -v. Последняя позволяет нам получать больше информации от команды. Она делает вывод более «подробным».

В ответ вы получите следующий вывод:

port scanning netcat utility

Вывод показывает много информации для каждого отдельного порта. Вы узнаете статус соединения каждого порта. С другой стороны, вы можете использовать IP-адрес вместо доменного имени, если вы его знаете. Это значительно ускоряет процесс. Вот пример:

Мы использовали флаг -n, чтобы указать, что системе не нужно использовать DNS для разрешения IP-адреса.

Обычно возвращаемые сообщения отправляются в стандартный поток ошибок. Чтобы быстрее отфильтровать результаты, вы можете перенаправить их в стандартный поток вывода. Для этого мы будем использовать синтаксис bash 2>&1. Впоследствии мы отфильтруем результаты с помощью grep. Давайте применим это к нашему примеру:

Вывод будет выглядеть примерно так:

port scan succeeded

Вывод показывает, что в данном диапазоне для подключения открыт только порт 22. Порт 22 является традиционным портом SSH.

Связь через Netcat: как это работает?

Далее мы увидим, как можно использовать netcat для отправки пакетов TCP и UDP. Более того, он также может принимать пакеты на различных портах. Благодаря этой возможности вы можете использовать два экземпляра netcat для создания отношений клиент-сервер. В начале вы определите клиента и сервер. После первоначальной настройки оба клиента смогут отправлять и получать пакеты в любом направлении.

Естественно, вам придется настроить netcat на одной системе для прослушивания подключений на одном порту. Для этого необходимо использовать параметр -l. С его помощью вы можете выбрать нужный порт следующим образом:

Теперь TCP на этой машине будет прослушивать подключения на порту 4444. Стоит отметить, что если вы являетесь обычным пользователем (не root), вы не сможете получить доступ к портам ниже 1000.

Далее вам нужно настроить вторую машину для установки соединения. Вы будете использовать тот же номер порта и укажете конкретное доменное имя следующим образом:

Выполнение этой команды не даст никакого вывода. Однако она установит соединение. Это означает, что вы можете начать отправлять сообщения с любого из серверов на другой. Для этого вам нужно всего лишь ввести сообщение и нажать ENTER. Сообщение отобразится на обоих экранах.

После завершения работы вы можете закрыть TCP-соединение, нажав CTRL+D.

Можно ли отправлять файлы с помощью Netcat?

Далее мы покажем вам, как можно отправлять файлы через netcat. С помощью TCP-соединения вы можете отправлять как сообщения, так и другие виды данных. Для начала необходимо выбрать одну машину для прослушивания подключений. Однако вместо того, чтобы вводить информацию в команде, мы поместим ее в файл следующим образом:

На другой машине вам придется создать новый текстовый файл. Вот команда, которую нужно использовать:

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

На другом компьютере появится новый файл с именем «received_file». Он будет содержать всю введенную нами информацию:

file transmissionВы можете использовать эту утилиту и превратить ее в программу для передачи файлов. Допустим, вы хотите передать содержимое каталога. Мы сделаем это, создав безымянный tar-архив, который передадим на систему и распакуем в удаленный каталог. На другой машине нам нужно подготовиться к приему файла. Мы знаем, что нам понадобится распаковать и извлечь его. Для этого выполните следующую команду:

Дефис указывает на то, что tar будет работать со стандартным вводом. Он поступает от netcat на исходном сервере, когда мы установили первоначальное соединение.

Наконец, мы можем поместить содержимое всего каталога в tar-архив и отправить его через netcat следующим образом:

Дефис в команде tar показывает, что мы даем системе команду архивировать и сжимать содержимое каталога. Он также указывает ей записать результат в стандартный вывод. Файл пройдет через TCP-соединение на другой конец. Принимающий сервер распакует его и сохранит в текущий удаленный каталог.

Точно так же вы можете передавать и другие виды данных через netcat. Многие люди используют команду dd для создания образов дисков и их передачи. Другой способ передачи данных и файлов описан в нашем руководстве, показывающем, как обеспечить безопасность при передаче файлов с помощью  SFTP.

Использование Netcat в качестве веб-сервера

Еще одна полезная функция netcat заключается в том, что вы можете использовать ее для тестирования своих страниц. Допустим, мы используем сервер для создания HTML-файла, подобного этому:

Вот HTML-код, который содержится в файле:

Введите это в файл, затем сохраните и закройте его. Обычно порт 80 является веб-портом по умолчанию. Как обычный пользователь без прав root, мы выберем порт 8888. Предполагая, что вы хотите запустить сервер и проверить страницу один раз, вам следует использовать эту команду:

Чтобы визуализировать содержимое файла, перейдите в браузер. Откройте следующее:

Вы сможете увидеть страницу, код которой вы написали в HTML-файле:

output html page netcat utility

Как только вы получите страницу, соединение netcat закроется. Это означает, что при обновлении страницы вы получите ошибку вместо содержимого. Это связано с тем, что мы настроили ее для однократной отдачи страницы. Если вы хотите продолжать принимать соединения для бесконечного просмотра страницы, используйте другой код:

Здесь мы обернули последнюю команду в бесконечный цикл. Если вы хотите остановить цикл, все, что вам нужно сделать, это нажать CTRL-C. Теперь вы можете продолжать просматривать свою страницу и ее отображение даже после закрытия первого соединения. Однако это максимальная функциональность, которую вы можете получить от использования утилиты netcat в качестве веб-сервера. Не пытайтесь использовать ее для обслуживания реальных веб-сайтов, так как она не обеспечивает никакой безопасности. Вместо этого вы можете ознакомиться с нашими руководствами по установке программного обеспечения веб-сервера, такого как Nginx, или Apache.

Заключение

В этом руководстве мы рассмотрели утилиту netcat и изучили ее универсальность в качестве инструмента на Ubuntu. Как мы выяснили в разделах выше, вы можете использовать ее для связи, передачи данных и отдачи страниц. Она отлично подходит для быстрого взаимодействия между серверами через TCP/UDP-соединения. Это очень полезная функция для многих базовых задач и диагностики.

Приятной работы!

author

Akshay Nagpal

Автор · CloudSigma

Preslav Dobrev — креативный дизайнер в CloudSigma, сосредоточенный на формировании последовательного корпоративного образа с помощью традиционных и инновационных маркетинговых каналов. Он умело сочетает художественное видение со стратегическим маркетингом, создавая убедительные истории бренда.

Комментарии

Комментариев пока нет. Будьте первым.