在 Node.js 中移植 Netcat。 CLI 实用程序。
要将其嵌入到 Node.js 应用程序中,请改用 netcat 包。这旨在用作独立工具,但它并不完全等于 netcat 的原始实现。
Linux | 苹果电脑操作系统 | 视窗 |
---|---|---|
$ 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
选项在远程计算机上快速运行 shell。建立连接后,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
中包含的文本,然后将 Web 服务器的响应输出到stdout
。
正常情况下,如果nc客户端断开连接,不会重试连接。使用--retry <secs>
或-R <secs>
参数,它将在 tot 秒后重试连接。
$ nc -R 5 localhost 2389
如果您有 docker,让我们尝试列出连接到 docker unix 套接字文件的容器镜像:
$ 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) 以 1 秒的等待时间 (-w) 通过管道传输到端口514
上的192.168.1.111
。
调试与详细模式匹配。您可以使用-v
参数或环境变量DEBUG=nc
启用它。该模块在底层使用 netcat 的节点实现,可以使用以下命令进行调试: DEBUG=netcat:*,nc
。
罗科·穆索里诺 (@roccomuso)