roccomuso/nc
GitHub: roccomuso/nc
用 Node.js 重新实现的 Netcat 命令行网络工具,支持 TCP/UDP 通信、端口扫描、文件传输等多种网络操作。
Stars: 26 | Forks: 4
# nc
[](https://www.npmjs.com/package/nc)

[](https://david-dm.org/roccomuso/nc)
[](https://standardjs.com)
使用 Node.js 实现的 Netcat 移植版。CLI 工具。:computer:
如果要在你的 Node.js 应用中嵌入使用,请改用 [netcat](https://github.com/roccomuso/netcat) 包。本工具旨在作为独立工具使用,但并没有完全等同于原始版本的 netcat 实现。
| Linux | Mac OS | Windows |
|-------|--------|---------|
| :white_check_mark: | :white_check_mark: | :white_check_mark: |
## 功能
- [x] TCP & UDP
- [x] 后门(反向 Shell)
- [x] 蜜罐
- [x] 文件传输
- [x] 端口转发
- [ ] 代理
- [x] Web 服务器与 HTTP 客户端
- [x] 端口扫描
## 安装
```
$ 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` | ` 或 `-R ` 参数,它将在指定的秒数后重试连接。
```
$ nc -R 5 localhost 2389
```
#### Unix socket 文件
如果你安装了 docker,我们可以尝试通过连接到 docker 的 unix socket 文件来列出我们的容器镜像:
```
$ echo -e "GET /images/json HTTP/1.0\r\n" | nc -U /var/run/docker.sock
```
附注:此示例需要 root 权限:`sudo su`。
#### 将 Netcat 作为代理
```
$ mkfifo /tmp/fifo
$ nc -l -k -p 8080 /tmp/fifo
```
#### 将 Netcat 作为简单的端口扫描器
```
$ nc -z 192.168.1.100 1-255
```
#### 导出十六进制流量
如果你使用 `-o` 选项,你可以导出所有的十六进制流量。
```
$ nc 127.0.0.1 4445 -o /tmp/log.txt
```
#### UDP 协议
默认情况下,nc 工具创建的所有 socket 都是 TCP 协议,但该工具也支持 UDP 协议。要启用 UDP 协议,需使用 -u 标志。
| 服务器端 | 客户端 |
|---------------------|------------------------------------|
| `nc -u -l -p 2389` | `nc -u localhost 2389` |
#### 发送 UDP 消息
```
$ echo 'message' | nc -w 1 -u 192.168.1.111 514
```
通过 UDP (-u) 以 1 秒的等待时间 (-w) 将数据管道传输到 `192.168.1.111` 的 `514` 端口。
## DEBUG
Debug 对应于详细输出模式。
你可以使用 `-v` 参数或环境变量 `DEBUG=nc` 来启用它。该模块底层使用了 [netcat](https://github.com/roccomuso/netcat) 的 Node.js 实现,如果要同时调试两者,请使用:`DEBUG=netcat:*,nc`。
## 作者
Rocco Musolino ([@roccomuso](https://twitter.com/roccomuso))
cat testfile | nc localhost 2389 |
#### 超时支持
```
$ nc -w 10 localhost 2389
```
上述连接将在 10 秒后被终止。
#### 强制 netcat 服务器保持运行
```
$ nc -kl 2389
```
这样即使客户端断开连接,服务器也会继续运行。
#### Netcat 执行命令
更令人兴奋的是,通过 `-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`。
#### 配置 netcat 客户端在断开连接时重试
在正常情况下,如果 nc 客户端断开连接,它是不会重试连接的。
使用 `--retry 标签:GNU通用公共许可证, MITM代理, Node.js, 插件系统, 数据可视化, 暗色界面, 网络信息收集, 网络安全, 网络通信, 自定义脚本, 隐私保护