运维 | 关于 Linux 中 nc 命令的使用
介绍
nc(netcat) 命令是一款功能强大的网络工具,被誉为网络界的瑞士军刀,短小精干,功能实用。它能够基于命令行在网络上读取和写入数据,连接与扫描指定端口号,支持TCP和UDP协议,为用户提供无限潜在用途。
快速使用
安装工具
yum -y install nc
安装 nmap-ncat 命令:
yum -y install nmap-ncat
语法格式
nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p<通信端口>]
[-s<来源位址>][-v...][-w<超时秒数>][主机名称][通信端口...]
参数说明
-g<网关> #设置路由器跃程通信网关,最大可设置8个。
-G<指向器数目> #设置来源路由指向器,其数值为4的倍数
-i<延迟秒数> #设置时间间隔,以便传送信息及扫描通信端口
-o<输出文件> #指定输出保存到文件中
-p<通信端口> #设置本地主机使用的通信端口
-s<来源位址> #设置本地主机送出数据包的IP地址
-w<超时秒数> #设置等待连线的时间
-l #使用监听模式
-n #使用IP地址
-r #乱数指定本地与远端主机的通信端口
-u #使用UDP传输协议
-v #显示指令执行过程中的详细信息
-z #使用0输入/输出模式
-h #打印帮助信息
使用示例
TCP: nc -vz [IP] [PORT]
UDP: nc -vuz [IP] [PORT]
- 扫描指定主机的IP和端口(默认TCP)
# 扫描指定目标ip和端口
nc -nvv 192.168.1.1 80
# 扫描指定目标IP和端口且输出详细信息
nc -v -z -w2 192.168.1.1 80
# 扫描指定目标IP和端口范围,如果只输出打开的端口,去掉-v参数即可
nc -v -z -w2 192.168.1.1 1-65535
- 扫描指定主机的IP和端口(UDP)
# 验证UDP端口
nc -uvz 192.168.1.1 55555
# 扫描成功与不成功都不会输出,可使用echo $?判断是否成功
nc -u -z -w2 192.168.1.1 1-65535
- 测试UDP端口
[root@localhost]# nc -vuz 192.168.0.1 22
Connection to 192.168.1.1 22 port [udp/*] succeeded!
- 文件传输
文件接收端
nc -lp 55555 > a.txt
文件发送端端
nc -w 1 192.168.1.1 55555 < a.txt
FAQ
解决 CentOS 7.x 中 nc 命令没有端口扫描功能问题
- 问题描述
在 CentOS7.X 中使用 yum install -y nc
安装的并不是 netcat 而是 nmap-ncat(ncat),并且通过软链接的方式链接为 nc 命令,但实际是 ncat 命令(这个命令没有端口扫描功能)。
- 原因分析
nc 与 netcat 通常是一个东西,而 ncat (也称nmap-ncat)是另一个东西,默认的nc命令链接到了ncat,所以自然得不到我们想要的结果。
查找安装位置
[root@localhost ~]$ whereis nc
nc: /usr/bin/nc /usr/share/man/man1/nc.1.gz
[root@localhost ~]$ ls -l /usr/bin/nc
lrwxrwxrwx. 1 root root 22 10月 31 21:17 /usr/bin/nc -> /etc/alternatives/nmap
[root@localhost ~]# ll /etc/alternatives/nmap
lrwxrwxrwx 1 root root 13 Aug 20 2020 /etc/alternatives/nmap -> /usr/bin/ncat
[root@localhost ~]# ll /usr/bin/ncat
-rwxr-xr-x 1 root root 380184 Aug 8 2019 /usr/bin/ncat
从上面可以看到 nc 命令链接的是 /etc/alternatives/nmap
,并不是 netcat 而是 nmap-ncat。
- 解决方法
删除原软链接
[root@localhost ~]$ sudo rm /usr/bin/nc
[root@localhost ~]$ whereis nc
nc: /usr/share/man/man1/nc.1.gz
下载安装 netcat
[root@localhost ~]# wget https://sourceforge.NET/projects/netcat/files/netcat/0.7.1/netcat-0.7.1.tar.gz
[root@localhost ~]# tar zxf netcat-0.7.1.tar.gz
[root@localhost ~]# cd netcat-0.7.1
[root@localhost ~]# ./configure
[root@localhost ~]# make && make install
[root@localhost ~]# echo $?
[root@localhost ~]# 0
[root@localhost ~]# which netcat
/usr/local/bin/netcat
[root@localhost ~]# ln -s /usr/local/bin/netcat /usr/bin/nc
[root@localhost ~]# nc -V