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
для получения дополнительной информации.