Appleex
Appleex
Published on 2023-11-24 / 150 Visits
0
1

运维 | 关于 Linux 中 nc 命令的使用

运维 | 关于 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

参考文献


Comment