nc

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

nc的作用

  1. 实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口
  2. 端口的扫描,nc可以作为client发起TCP或UDP连接
  3. 机器之间传输文件
  4. 机器之间网络测速

安装nc

yum install nmap-ncat -y

常用的参数

-l 用于指定nc将处于侦听模式。指定该参数,则意味着nc被当作server,侦听并接受连接,而非向其它地址发起连接。
-p <port> 暂未用到(老版本的nc可能需要在端口号前加-p参数,下面测试环境是centos6.6,nc版本是nc-1.84,未用到-p参数)
-s 指定发送数据的源IP地址,适用于多网卡机
-u 指定nc使用UDP协议,默认为TCP
-v 输出交互或出错信息,新手调试时尤为有用
-w 超时秒数,后面跟数字
-z 表示zero,表示扫描时不发送任何数据

监听一个tcp端口

监听tcp 6666端口

$ nc -l 6666
hello

通过telnet验证是否能访问到端口, 访问通之后,可以看到hello,然后输入ok,回车,服务端那边就会打印出ok,两边输入之后回车后,另外一边都可以看到发送的信息。

::

$ telnet 192.168.3.3 6666 Trying 192.168.3.3… Connected to 192.168.3.3. Escape character is ‘^]’. hello

ok

通过nc验证是否能访问到端口

nc -vz -w 2 192.168.3.3 6666

用nc访问过之后,服务端对端口的监听会断掉。

通过nmap 验证是否能访问到端口

nmap  192.168.3.3 -p6666

监听一个udp端口

nc -ul 7777

客户端验证udp端口是否可访问

nc -vuz -w 2 192.168.3.3 7777

用nc访问过之后,服务端对端口的监听会断掉。

下面用nmap扫描我监听的端口,nmap扫描之后也会导致服务端断开监听

nmap -sU 192.168.3.3 -p 7777 -Pn

使用nc传输文件和目录

传输文件演示(先启动接收命令)

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

步骤1,先在B机器上启动一个接收文件的监听,格式如下

意思是把赖在9995端口接收到的数据都写到file文件里(这里文件名随意取)

#nc -l port >file
nc -l 9995 >zabbix.rpm

步骤2,在A机器上往B机器的9995端口发送数据,把下面rpm包发送过去

nc 10.0.1.162 9995 < zabbix-release-2.4-1.el6.noarch.rpm

B机器接收完毕,它会自动退出监听,文件大小和A机器一样,md5值也一样

测试网速

测试网速其实利用了传输文件的原理,就是把来自一台机器的/dev/zero 发送给另一台机器的/dev/null

就是把一台机器的无限个0,传输给另一个机器的空设备上,然后新开一个窗口使用dstat命令监测网速

在这之前需要保证机器先安装dstat工具

yum install -y dstat

方法1,测试网速演示(先启动接收命令方式)

步骤1,A机器先启动接收数据的命令,监听自己的9991端口,把来自这个端口的数据都输出给空设备(这样不写磁盘,测试网速更准确)

nc -l 9991 >/dev/null

步骤2,B机器发送数据,把无限个0发送给A机器的9991端口

nc 10.0.1.161 9991 </dev/zero

在复制的窗口上使用dstat命令查看当前网速,dstat命令比较直观,它可以查看当前cpu,磁盘,网络,内存页和系统的一些当前状态指标。 我们 只需要看下面我选中的这2列即可,recv是receive的缩写,表示接收的意思,send是发送数据,另外注意数字后面的单位B,KB,MB

可以看到A机器接收数据,平均每秒400MB左右

B机器新打开的窗口上执行dstat,看到每秒发送400MB左右的数据

方法2,测试网速演示(先启动发送命令方式)

步骤1,先启动发送的数据,谁连接这个端口时就会接收来自zero设备的数据(二进制的无限个0)

nc -l 9990 </dev/zero

步骤2,下面B机器连接A机器的9990端口,把接收的数据输出到空设备上

nc 10.0.1.161 9990 >/dev/null

同样可以使用dstat观察数据发送时的网速