• nc其实就是netcat工具,netcat工具在另一篇文章也有介绍:​

一、nc简介

  • nc是netcat的简写,有着网络界的瑞士军刀美誉。因为它短小精悍、功能实用,被设计为一个简单、可靠的网络工具

二、nc的作用

  • 实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口

  • 可以做端口的扫描,nc可以作为client发起TCP或UDP连接

  • 机器之间传输文件

  • 测试机器之间的网速

三、常用的参数

  • -l:​用于指定nc将处于侦听模式。指定该参数,则意味着nc被当作server,侦听并接受连接,而非向其它地址发起连接

  • -p <port>:​版本的nc需要在端口号前加-p参数,下面测试环境是kali 2019,需要用到,如果是比较新的nc版本,则不需要该参数

  • -s :​指定发送数据的源IP地址,适用于多网卡机 

  • -u: ​指定nc使用UDP协议,默认为TCP

  • -v:​输出交互或出错信息,新手调试时尤为有用

  • -w:​超时秒数,后面跟数字 

  • -z:​表示zero,表示扫描时不发送任何数据

四、nc作为tcp server监听

nc开启TCP端监听

  • 开启一个tcp server监听端,端口为8000

服务/软件管理:32---nc网络工具_服务端


测试1

  • 在另一端使用telnet连接到该端口

服务/软件管理:32---nc网络工具_数据_02

  • 连接之后,server端接收到连接

服务/软件管理:32---nc网络工具_客户端_03

此时双方可以进行通信和发送数据了

  • 客户端给server发送一个字符串“HelloWorld”

服务/软件管理:32---nc网络工具_服务端_04服务/软件管理:32---nc网络工具_服务端_05

  • server端给客户端发送一个字符串“I am server”

服务/软件管理:32---nc网络工具_服务端_06服务/软件管理:32---nc网络工具_客户端_07

  • 如果想要终止连接,就在服务端按下ctrl+c(终止)或者关闭客户端
  • 如果两端只要有一段退出,此次nc会话就结束,服务端和客户端都关闭



测试2

  • 使用nmap扫描该server

服务/软件管理:32---nc网络工具_nc网络工具_08



测试3

  • 使用nc命令作为客户端工具进行端口探测

服务/软件管理:32---nc网络工具_服务端_09

服务/软件管理:32---nc网络工具_数据_10

  • 这种方法是进行一次连接,扫描之后,本次会话会终止

服务/软件管理:32---nc网络工具_数据_11


附加:nc扫描多个端口


  • 第一步:​开启两个端口监听

服务/软件管理:32---nc网络工具_nc网络工具_12

  • 第二步:​在另一端扫描两个端口

服务/软件管理:32---nc网络工具_客户端_13

  • 第三步:​同时在另一侧看到这两个server都终止(会话结束)

服务/软件管理:32---nc网络工具_客户端_14


五、nc作为udp server监听

nc开启UDP监听

服务/软件管理:32---nc网络工具_nc网络工具_15

  • 使用netstat查看端口信息

服务/软件管理:32---nc网络工具_服务端_16

  • 由于udp的端口无法在客户端使用telnet去测试(telnet是运行于tcp协议的),下面我们也无法使用telnet去测试


测试1

  • 使用nc命令去扫描(u表示udp端口,v表示可视化输出,z表示扫描时不发送数据)

服务/软件管理:32---nc网络工具_客户端_17

  • 同样,UDP server端终止,会话结束

服务/软件管理:32---nc网络工具_数据_18



测试2

  • 使用nmap扫描
  • -sU:​表示udp端口的扫描
  • -Pn:​如果服务器禁PING或者放在防火墙下面的,不加-Pn 参数的它就会认为这个扫描的主机不存活就不会进行扫描了,如果不加-Pn就会像下面的结果一样,它也会进行提示你添加上-Pn参数尝试的
  • 192.168.43.62开启了防火墙,扫描结果可能会显示filtered(不能确定对方是否有监听8000端口)

服务/软件管理:32---nc网络工具_数据_19



测试3

  • nc扫描大量udp端口
  • 扫描过程比较慢,可能是1秒扫描一个端口

服务/软件管理:32---nc网络工具_数据_20


六、nc传输文件

nc传输文件的特点:

  • 使用nc传输文件还是比较方便的,因为不用scp和rsync那种输入密码的操作了
  • 把A机器上的一个rpm文件发送到B机器上
  • 需注意操作次序,receiver先侦听端口,sender向receiver所在机器的该端口发送数据。


先监听再发送

  • 先在右侧8000端口监听,将接收到的数据都存入文件里(下面我们存入test.rpm)
  • 其实这就是开启一个服务端,然后将接收到的数据重定向test.rpm文件中
  • 备注:这个test.rpm文件已经建立了,但是还没有数据

服务/软件管理:32---nc网络工具_数据_21

  • 再在左侧往右侧的8000端口发送数据,把下面rpm包发送过去
  • 其实这就是开启一个客户端,将信息输出到server端

服务/软件管理:32---nc网络工具_服务端_22

  • 终止右侧的服务端

服务/软件管理:32---nc网络工具_nc网络工具_23

  • 查看两个文件的内容一模一样

服务/软件管理:32---nc网络工具_服务端_24



先发送再监听

这个其实与上面的步骤是相反的,但是原理是相同的

  • 右侧将hello.txt的文件内容作为8000端口的数据发送出去(其实就是开启一个服务端)

服务/软件管理:32---nc网络工具_数据_25

  • 左侧接受右侧的8000端口的数据,存放到test.rpm文件中(其实就是开启一个客户端)

服务/软件管理:32---nc网络工具_服务端_26

  • server端终止

服务/软件管理:32---nc网络工具_nc网络工具_27

  • 查看文件内容

服务/软件管理:32---nc网络工具_服务端_28


七、nc传输多个文件和目录

我们首先建立(a、b、c、d、e、f)6个文件

服务/软件管理:32---nc网络工具_服务端_29


右侧先启动监听

  • 左侧给右侧发送多个文件,传输目录需要结合其它的命令,比如tar,经过我的测试管道后面最后必须是 - ,不能是其余自定义的文件名
  • (因为在同一台机器下实验,所以为了防止文件冲突,我们接收端更换了路径)

服务/软件管理:32---nc网络工具_客户端_30



左侧​打包文件并连接右侧的端口

  • 管道前面表示把当前目录的所有文件打包为 - ,然后使用nc发送给右侧

服务/软件管理:32---nc网络工具_客户端_31

服务/软件管理:32---nc网络工具_数据_32

  • 右侧已经自动接收和解压

服务/软件管理:32---nc网络工具_客户端_33

  • 终止右侧server端,查看接收到的文件

服务/软件管理:32---nc网络工具_nc网络工具_34


八、nc测试网速

  • 原理:​测试网速其实利用了传输文件的原理,就是把来自一台机器的/dev/zero 发送给另一台机器的/dev/null就是把一台机器的无限个0,传输给另一个机器的空设备上,然后新开一个窗口使用dstat命令监测网速
  • 此处我们的测试环境为CentOS,使用dstat工具,其他Linux系统可能没有这个工具