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

netcat также широко доступен и предустановлен в большинстве операционных систем на основе UNIX, включая MacOS и популярные дистрибутивы Linux, такие как Ubuntu.

Есть много советов и приемов для правильного использования netcat, но я сделаю все возможное, чтобы попытаться обобщить его основной вариант использования ниже.

Есть два основных способа использования netcat: вызов с помощью команды netcat или ее псевдонима nc.

Отправка TCP-пакетов

$ echo '<YOUR MESSAGE HERE>' | nc <HOST> <PORT>

Пример:

# Sending ‘hello world!’ to localhost on port 12345.
$ echo 'hello world' | nc localhost 12345

Прослушивание входящих TCP-пакетов

$ nc -l <PORT>

Пример:

$ nc -l 12345 # Tell netcat to listen to port 12345 for TCP packets

Вот несколько творческих вариантов использования этих двух основных функций:

Отправка / получение файлов:

Допустим, у нас есть файл с именем example-netcat.txt, содержащий сообщение «привет, netcat!»:

$ cat example-netcat.txt
hi there, netcat! # contents of example-netcat.txt

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

Отправитель:

nc localhost 12345 < example-netcat.txt

Получатель:

nc -l 12345 > example-netcat2.txt

Если это выполняется успешно, example-netcat2.txt будет содержать то же содержимое, что и example-netcat.txt.

$ cat example-netcat2.txt
hi there, netcat! # which is the same as in the original file.

Вы также можете просмотреть пакеты, передаваемые netcat в режиме реального времени, запустив такие программы, как WireShark или tcpdump.

Сканирование портов

nmap - отличный инструмент для сканирования портов, но вы также можете использовать netcat для выполнения основных задач сканирования портов.

$ nc -z <HOST> <PORT RANGE>

Пример:

# Scan 'host.example.com' with ports ranging from 10 to 50.
$ nc -z host.example.com 10–50

Флаг -z в основном указывает netcat сообщать только об открытых портах и ​​не устанавливать соединения.

Обратите внимание, что это может занять некоторое время, и время, потраченное здесь, линейно пропорционально размеру диапазона портов, в котором выполняется поиск.

Другие варианты

Пакеты UDP

netcat отправляет / принимает пакеты TCP по умолчанию, но также может отправлять пакеты UDP с флагом командной строки -u:

Отправитель:

# Sending ‘hello world!’ as UDP packet(s) to localhost on port 12345.
$ echo 'hello world' | nc -u localhost 12345

Получатель:

$ nc -ul 12345 # Tell netcat to listen to port 12345 for UDP packets

Подробный вывод

netcat также имеет подробный -v флаг командной строки:

$ nc -l 12345 -v # Listen on port 12345
Listening on [0.0.0.0] (family 0, port 12345) # This will be printed when verbose is enabled.

Не забудьте заглянуть в man nc или man netcat для получения дополнительной информации.