Портирование 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)