它被设计成可以由其他程序灵活驱动可靠的后台工具,拥有 "瑞士军刀" 的美称,也是网络管理员常用的工具之一
安装
以下是 nc工具的安装,完成后执行 nc --version命令, 如果返回nc的版本信息表示安装成功
yum install nc[root@ecs-centos-7 ~]# nc --versionNcat: Version 7.50 ( https://nmap.org/ncat )扫描端口
有时需要测试服务器的端口连通性,下面的命令是测试服务器端口是否开启
[root@ecs-centos-7 ~]# nc -z -v -w 3 10.3.3.3 22Ncat: Version 7.50 ( https://nmap.org/ncat )Ncat: Connected to 10.3.3.3 22:22.Ncat: 0 bytes sent, 0 bytes received in 0.03 seconds.[root@ecs-centos-7 ~]# nc -z -v -w 3 10.3.3.3 22 6000Ncat: Version 7.50 ( https://nmap.org/ncat )Ncat: Connection refused.-v 选项是输出命令结果信息,
从上面的结果可以看出,目标服务器上 22 端口是开启的,6000 端口是关闭的
例子中扫描的是 TCP 协议的端口,如果要扫描 UDP 协议的端口,需要加上 -u 选项,如果换成 UDP端口的话,上面的命令就会变成 nc -uz -v -w 3 10.3.3.3 22
聊天服务器
机器A的终端开启端口侦听,机器B连接A侦听的端口并向A发送数据。具体过程如下:
63机器相当于一个简易的命令行聊天服务器,64机器相当于客户端的功能,默认使用 TCP 协议连接服务器
可以看到,63机器在本地开启一个侦听8000端口的服务,64机器连接63机器的8000端口,连接成功之后可以互相发送数据了
传输文件
63机器作为服务器,侦听8000端口并重定向到 out.txt 文件,64机器连接63成功之后,自动把 input.txt 文件传输到服务器
创建后门
上面的例子中,63机器开启端口 8000 的本地服务,服务会使用 /bin/bash 执行收到的命令,64机器客户端连上63机器后,输入任意的命令,都相当于在63机器上执行,命令结果返回给64机器
远程执行脚本
服务器端
nc -l 192.168.70.63 8000 --sh-exec ./s.sh 服务器端
nc -l 192.168.70.63 8000 --lua-exec t.lua Web服务器
服务器执行 nc -k -l 192.168.70.63 8080 < index.html 命令监听8080端口
注意:-k 选项是指监听模式接受多个连接,如果没有指定 -k 选项的话,浏览器访问一次,服务器就会退出了
作为浏览器
nc 不仅可以当作web服务器,还可以当作浏览器发送HTTP请求
以百度首页为例, 输入 nc www.baidu.com 80,回车之后,再次输入 GET / HTTP/1.0 再次敲击两次回车,即可获得百度首页的 HTML 文档内容,由于百度首页HTML太长,下面的例子只是文档的部分内容
[cgyx@cghost35 ~]$ nc www.baidu.com 80GET / HTTP/1.0HTTP/1.0 200 OKAccept-Ranges: bytesCache-Control: no-cacheContent-Length: 14615Content-Type: text/htmlDate: Thu, 16 Jul 2020 06:49:16 GMTP3p: CP=" OTI DSP COR IVA OUR IND COM "P3p: CP=" OTI DSP COR IVA OUR IND COM "Pragma: no-cacheServer: BWS/1.1查找运行在端口上的服务
nc 可以扫描指定IP上指定端口是否开启,那能否查找到指定IP上运行于指定端口上的服务呢? 答案是肯定的,以下的例子是获取指定IP上 22 号端口上运行的服务
[root@ecs-centos-7 ~]# nc -v -n 10.3.3.3 22Ncat: Version 7.50 ( https://nmap.org/ncat )Ncat: Connected to 10.3.3.3 22.SSH-2.0-OpenSSH_6.6.1从上面的例子中可以看出,机器(IP:10.3.3.3)上22号端口上运行的是SSH服务
访问控制
服务器端可以只接受指定的IP的连接或者只拒绝指定IP的连接
1、下面的例子中 增加 -k 选项是让服务器接受多个连接,避免接受一个客户端连接就退出了
只允许IP为 192.168.62 客户端连接
nc -k -l 192.168.63 8000 --lua-exec t.lua --allow 192.168.62只允许内网IP段的客户端连接
nc -k -l 192.168.63 8000 --lua-exec t.lua --allow 192.168.62-64只拒绝IP为 192.168.62 的客户端
nc -k -l 192.168.63 8000 --lua-exec t.lua --deny 192.168.62只拒绝内网IP段的客户端连接
nc -k -l 192.168.63 8000 --lua-exec t.lua --deny 192.168.62-64从文件中获取deny访问的IP地址列表
[cgyx@cghost35 ~]$ cat deny.txt 192.168.70.62192.168.70.64[cgyx@cghost35 ~]$ nc -k -l 8000 --lua-exec t.lua --denyfile deny.txt
