Портирование Netcat в Node.js. Утилита CLI.
Чтобы встроить его в свое приложение Node.js, используйте пакет netcat. Он предназначен для использования в качестве автономного инструмента, но он не полностью аналогичен исходной реализации netcat.
| Линукс | Mac ОС | Окна |
|---|---|---|
$ npm install -g nc
$ nc -l -p port [- options] [hostname] [port]
Доступные варианты:
-c shell commands as `-e’; use /bin/sh to exec [dangerous!!]
-e filename program to exec after connect [dangerous!!]
-b allow broadcasts
-h this cruft
-i secs delay interval for lines sent, ports scanned
-k set keepalive option on socket
-l listen mode, for inbound connects
-n numeric-only IP addresses, no DNS
-o file hex dump of traffic
-p port local port number
-r randomize local and remote ports
-s addr local source address
-u UDP mode
-U Listen or connect to a UNIX domain socket
-v verbose
-w secs timeout for connects and final net reads (client-side)
-z zero-I/O mode [used for scanning]
$ nc -l -p 2389
$ nc localhost 2389
Открытие сырого соединения с портом 2389 .
| Серверная часть | Клиентская часть |
|---|---|
nc -l 2389 > test | cat testfile | nc localhost 2389 |
$ nc -w 10 localhost 2389
Соединение выше будет прервано через 10 секунд.
$ nc -kl 2389
Таким образом, сервер продолжает работать, даже если клиент отключился.
Гораздо более интересная вещь — запустить быструю оболочку на удаленной машине, используя опцию -l или listen и опцию -e или execute . Когда соединение установлено, Netcat выполняет программу по вашему выбору и подключает stdin и stdout программы к сетевому соединению.
$ nc -l -p 23 -e /bin/sh
Давайте создадим файл HTTP-запроса get.txt , который будет содержать следующую строку, а затем пустую строку:
GET / HTTP/1.0
Чтобы использовать Netcat для получения домашней страницы веб-сайта, используйте:
$ nc -v www.website.com 80 < get.txt
Вы увидите, как Netcat подключается к порту 80, отправляет текст, содержащийся в файле get.txt , а затем выводит ответ веб-сервера на stdout .
В обычном сценарии, если клиент nc отключается, он не будет повторять попытку подключения. С параметром --retry <secs> или -R <secs> соединение будет повторено через tot секунд.
$ nc -R 5 localhost 2389
Если у вас есть docker, давайте попробуем составить список образов наших контейнеров, подключающихся к файлу сокета unix docker:
$ echo -e " GET /images/json HTTP/1.0rn " | nc -U /var/run/docker.sock ПС. для этого примера требуются права root: sudo su .
$ mkfifo /tmp/fifo
$ nc -l -k -p 8080 < /tmp/fifo | nc website.com 80 > /tmp/fifo $ nc -z 192.168.1.100 1-255
Если вы используете опцию -o , вы можете сбросить весь шестнадцатеричный трафик.
$ nc 127.0.0.1 4445 -o /tmp/log.txt
По умолчанию все сокеты, создаваемые утилитой nc, являются протоколами TCP, но эта утилита также работает с протоколом UDP. Для включения протокола UDP используется флаг -u.
| Серверная часть | Клиентская часть |
|---|---|
nc -u -l -p 2389 | nc -u localhost 2389 |
$ echo 'message' | nc -w 1 -u 192.168.1.111 514
Направьте через UDP (-u) время ожидания (-w) 1 секунду на 192.168.1.111 на порту 514 .
Отладка соответствует подробному режиму. Вы можете включить его с помощью параметра -v или env var DEBUG=nc . Этот модуль использует реализацию узла netcat под капотом, для отладки обоих используйте: DEBUG=netcat:*,nc .
Рокко Мусолино (@roccomuso)