Netcat (или nc) это классическая сетевая утилита Unix, позволяющая устанавливать TCP и UDP соединения, принимать и передавать данные, проверять открытые порты на удаленном компьютере, тестировать правила файерволов В этой статье мы рассмотрим типовые сценарии использования консольной утилиты netcat.
Утилита доступна как в Linux, так и в Windows.
Установка netcat:
- В CentOS/RHEL:
$ sudo yum install nc
- В Debian/Ubuntu:
$ sudo apt update
$ sudo apt install netcat - В Windows: портированную версию netcat для Windows можно скачать здесь (https://eternallybored.org/misc/netcat/)
Рассмотрим несколько примеров использования netcat.
NetCat: проверка открытых TCP/UDP портов на удаленном компьютере
Проверка TCP 53 порта на удаленном компьютере:
$ nc -zv 192.168.13.10 53
[192.168.13.10] 53 (domain) open
В данном примере TCP порт 53 (DNS) отрыт.
–z
указывает, что нужно выполнить сканирование удаленного порта службы, фактически не отправляя данные-v
– включает подробный режим-n
– позволяет пропустить поиск в DNS (сканирование выполнится быстрее)
Можно просканировать несколько портов:
$ nc -nzv 192.168.13.10 445 3389 25
Вы можете просканировать диапазон удаленных портов с помощью nc (без использования nmap):
$ nc -vz 192.168.13.10 1-1023 2>&1 | grep succeeded
В выводе команды будут показаны только открытые порты.
Connection to 192.168.31.10 135 port [tcp/epmap] succeeded! Connection to 192.168.31.10 445 port [tcp/microsoft-ds] succeeded!
Можно проверить UDP порты. Например, чтобы проверить открыт ли UDP порт 139 (NETBIOS Session Service):
$ nc -uv 192.168.13.10 139
В обоих случаях команда вернула, что указанный порт открыт.
Если порт закрыт, netcat вернет:
[192.168.13.12] 25 (smtp) : Connection refused.
Обратите внимание, что netcat возвращает название удаленного сервиса, если используется один из стандартных номеров портов TCP/UDP.
Запуск прослушивателя порта на NetCat
Утилита netcat также позволяет запустить прослушивание определенного порта на вашем компьютере. Чтобы запустить службу на порту TCP 5000, выполните команду:
$ nc -l 5000
В следующем примере мы создадим простой чат между двумя компьютерам. Все что вы наберете на клиенте и отправите с помощью Enter появится в консоли другого компьютера:
- Сервер:
$ nc -lvp 5555
- Клиент:
$ nc 192.168.13.10 5555
В таком режиме все, что приходит на этот порт 5555 сервера, выводится в консоль.
Чтобы закрыть соединение, нажмите Ctrl+C
.
NetCat в режиме прослушивается часто используется для создания reverse shell:
$ nc -e /bin/bash -lp 5555
Подключается к нему:
$ nc 192.168.13.10 5555
Передача файлов с помощью NetCat
Вы можете использовать NetCat для передачи файлов или целых директорий между хостами. Для этого нужно запустить сервер netcat, прослушивающий определенный порт и перенаправить его вывод в файл:
$ nc -l 5555 > target.txt
Затем подключитесь на этот порт с клиента и передайте файл:
$ nc 192.168.13.10 5555 < source.txt
Можно перенаправить вывод файла лога с одного сервера на другой:
$ tail -f /var/log/zabbix/zabbix_agentd.log | nc 192.168.13.10 5555
С помощью nc можно передать по сети образ диска.
- Сервер:
$ nc -lvp 5555 > dd of=/backup/sda.img.gz
- Клиент:
$ dd if=/dev/sda | gzip -c | nc 192.168.13.10 5555
Запуск простого веб сервера на NetCat
Вы можете использовать NetCat в качестве простого веб сервера. Достаточно передать ему на вход веб-страницу:
$ while true; do nc -lp 80 < /var/www/html/index.html; done
Теперь, если подключится к вашему хосту через браузер на 80 порт, перед вами появится дефолтная веб страница Apache.
Можно использовать netcat для тестирования производительности канала (в качестве простой замены iperf):
- Прослушиватель:
$ nc -v -l 2222 > /dev/null
- Сендер:
$ dd if=/dev/zero bs=200K count=10 | pv -b | nc -v 192.168.13.10 2222
Современным версией утилиты NetCat является ncat, которая доступна по-умолчанию во многих дистрибутивах Linux.