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

nc命令的作用

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

nc命令的参数

1) -l
使用侦听模式。指定该参数,则意味着nc被当作server,侦听并接受连接,而非向其它地址发起连接
2) -p <port>
设置本地主机使用的通信端口
3) -s
指定发送数据的源IP地址,适用于多网卡机
4) -u
指定nc使用UDP协议,默认为TCP
5) -v
输出交互或出错信息,新手调试时尤为有用
6)-w
超时秒数,后面跟数字 , 即设置等待连线的时间
7)-z
表示zero,表示扫描时不发送任何数据

几个使用场景

测试网络连接通信与端口扫描(类似telnet)

服务端(10.12.7.2)作为server启动一个tcp的端口监听:

[root@111 ~]# nc -l 9999               #后面加&表示后台挂起

客户端测试:

[root@222 ~]# nc -vzw 2 10.12.7.2 9999
Connection to 10.12.7.2 9999 port [tcp/distinct] succeeded!

其中-w一定要写在最后,因为2是-w的时间参数,即 nc -vz -w 2 10.12.7.2 9999

如果是对多个端口扫描:

服务端
[root@111 ~]# nc -l 9999 &
[1] 27824
[root@111 ~]# nc -l 9998 &
[2] 27825 客户端
[root@222 ~]# nc -vzw 2 10.12.7.2 9997-9999
nc: connect to 10.12.7.2 port 9997 (tcp) failed: Connection refused
Connection to 10.12.7.2 9998 port [tcp/distinct32] succeeded!
Connection to 10.12.7.2 9999 port [tcp/distinct] succeeded!

传输文件的工具

假设在政府部门的机房,只有已经连接上的两台机子,并不知道ssh的密码,那么同时也无法使用scp拷贝文件,这时nc可以解决问题。

服务端:启动9999端口监听,意思是把此端口接受到的数据都写到abc.txt文件(这个文件名随意,不用与客户端发送的文件名一致)
[root@111 ~]# nc -l 9999 > abc.txt 客户端:向服务端的9999端口发送nick.txt文件
[root@222 ~]# nc 10.12.7.2 9999 < nick.txt

服务端接收完毕,它会自动退出监听,文件大小和客户端一样,md5值也一样

测试网速

测试网速其实利用了传输文件的原理,就是把来自一台机器的/dev/zero 发送给另一台机器的/dev/null
就是把一台机器的无限个0,传输给另一个机器的空设备上,然后新开一个窗口使用dstat命令监测网速
在这之前需要保证机器先安装dstat工具:yum install -y dstat

服务端:服务端启动监听9999端口,把来自这个端口的数据都输出给空设备(这样不写磁盘,测试网速更准确)
[root@333 ~]# nc -l 9999 > /dev/null 客户端:发送数据,把无限个0发送给服务端的9999端口
[root@444 ~]# nc 172.31.52.71 9999 < /dev/zero

使用dstat命令查看两台机子的网速:

服务端:
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read writ| recv send| in out | int csw
0 0 99 0 0 0| 0 0 | 117M 520k| 0 0 |7017 14k
0 0 99 0 0 0| 0 0 | 117M 514k| 0 0 |6950 14k
0 0 99 0 0 0| 0 0 | 117M 518k| 0 0 |7042 14k
0 0 99 0 0 0| 0 124k| 117M 515k| 0 0 |6985 14k
0 1 98 1 0 0| 0 76k| 117M 510k| 0 0 |7007 14k
0 0 100 0 0 0| 0 0 | 117M 517k| 0 0 |7048 14k
0 1 99 0 0 0| 0 0 | 117M 511k| 0 0 |7036 14k
0 0 99 0 0 0| 0 0 | 117M 514k| 0 0 |7083 14k
0 0 100 0 0 0| 0 60k| 117M 513k| 0 0 |7098 14k
0 0 98 1 0 0| 0 60k| 117M 506k| 0 0 |6948 14k
0 0 99 0 0 0| 0 0 | 117M 510k| 0 0 |7065 14k
0 1 99 0 0 0| 0 0 | 117M 518k| 0 0 |7138 14k
客户端:
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read writ| recv send| in out | int csw
0 2 98 0 0 0|4096B 48k| 532k 117M| 0 0 | 14k 4615
1 2 97 0 0 1| 0 180k| 865k 117M| 0 0 | 14k 4978
0 2 98 0 0 0| 0 48k| 527k 117M| 0 0 | 14k 4601
1 2 95 2 0 0| 0 124k| 526k 117M| 0 0 | 13k 4600
0 2 98 0 0 0| 0 0 | 534k 117M| 0 0 | 14k 4600
0 2 98 0 0 1| 0 24k| 518k 117M| 0 0 | 14k 4608
1 2 98 0 0 0| 0 52k| 508k 117M| 0 0 | 14k 4549
2 2 95 0 0 0| 0 0 | 525k 117M| 0 0 | 14k 4612
0 2 96 2 0 0| 0 168k| 521k 117M| 0 0 | 13k 4750
1 2 98 0 0 0| 0 0 | 521k 117M| 0 0 | 13k 4570

可以看到服务端接收数据维持在117M,客户端发送数据也在117M。

参考:https://www.cnblogs.com/nmap/p/6148306.html

linux网络工具nc命令的更多相关文章

  1. 一文让你熟练掌握Linux的ncat(nc)命令

    一文让你熟练掌握Linux的ncat(nc)命令 ncat 或者说 nc 是一款功能类似 cat 的工具,但是是用于网络的.它是一款拥有多种功能的 CLI 工具,可以用来在网络上读.写以及重定向数据. ...

  2. 【转】Linux 网络工具详解之 ip tuntap 和 tunctl 创建 tap/tun 设备

    原文:https://www.cnblogs.com/bakari/p/10449664.html -------------------------------------------------- ...

  3. Linux 网络工具netcat(nc)的应用

    NETCAT netcat是Linux常用的网络工具之一,它能通过TCP和UDP在网络中读写数据,通过与其他工具结合和重定向,可以在脚本中以多种方式使用它. netcat所做的就是在两台电脑之间建立链 ...

  4. 功能超级强大的网络工具nc

    摘自:http://www.linuxso.com/command/nc.html 功能说明:功能强大的网络工具语 法:nc [-hlnruz][-g<网关...>][-G<指向器数 ...

  5. 需要了解的 Linux 网络和监控命令

    列出来的10个基础的每个linux用户都应该知道的网络和监控命令.网络和监控命令类似于这些: hostname, ping, ifconfig, iwconfig, netstat, nslookup ...

  6. 10个基础的linux网络和监控命令

    配置zookeeper集群时,需要查看本机ip,输入命令 hostname -i   就会只显示主机ip, 下边搜了一篇常用的    命令,闲的时候多敲敲命令,以便用的时候再找! 我下面列出来的10个 ...

  7. 注意啦!10 个你需要了解的 Linux 网络和监控命令

    下面列出来的10个基础的每个Linux用户都应该知道的网络和监控命令.网络和监控命令类似于这些:hostname, ping, ifconfig, iwconfig, netstat, nslooku ...

  8. linux网络配置相关命令、虚拟网络接口eth0:0

    网络接口(interface)是网络硬件设备在操作系统中的表示方法,比如网卡在Linux操作系统中用ethX,是由0开始的正整数,比如eth0.eth1...... ethX.而普通猫和ADSL的接口 ...

  9. 10个实用的 Linux 网络和监控命令[转]

    本文列出了10个基础的每个Linux用户都应该知道的网络和监控命令.网络和监控命令类似于这些: hostname, ping, ifconfig, iwconfig, netstat, nslooku ...

随机推荐

  1. 如何更简单的使用Polly

    Polly 弹性瞬时错误处理库 Polly是一个C#实现的弹性瞬时错误处理库 它可以帮助我们做一些容错模式处理,比如: 超时与重试(Timeout and Retry) 熔断器(Circuit Bre ...

  2. C#实现SHA256WithRSA加密用于Java的秘钥私钥

    首先要把Java秘钥进行转换,然后再进行加密 转制秘钥的方法 public static string RSAPrivateKeyJava2DotNet(string privateKey) { Rs ...

  3. Docker(一):Docker安装

    简介   Docker是dotcloud公司开源的一款产品,主要基于PAAS平台为开发者提供服务.是解决运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术. Docker组件 ...

  4. IIS应用程序池配置详解及优化

    参数说明 1.常规 属性名称 属性详解 NET CLR 版本 配置应用程序池,以加载特定版本的 .NET CLR.选定的 CLR版本应与应用程序所使用的相应版本的 .NET Framework 对应. ...

  5. css 15-Sass入门

    15-Sass入门 #Sass简介 大家都知道,js 中可以自定义发量,css 仅仅是一个标记语言,不是编程语言,因此不可以自定义发量.不可以引用等等. 面对这些问题,我们现在来引入 Sass,简单的 ...

  6. 图像处理论文详解 | Deformable Convolutional Networks | CVPR | 2017

    文章转自同一作者的微信公众号:[机器学习炼丹术] 论文名称:"Deformable Convolutional Networks" 论文链接:https://arxiv.org/a ...

  7. 个人博客搭建Python实现-尝试-遇到的问题(10.1.1)

    @ 目录 前提 1.Git相关 2.环境相关 3.nginx相关 4.linux相关 关于作者 前提 自己搭建了一个简单的flask微信公众号 在github上找到一个django搭建的博客网站 有一 ...

  8. Django中ORM的使用

    Django中ORM的使用 ORM orm(object-relation-mapping)对象关系映射,即用对象来表示关系数据库中的表: 类 --> 表, 对象-->一行数据 对象的属性 ...

  9. (已解决)'ng' 不是内部或外部命令,也不是可运行的程序或批处理文件

    前言: 之前在安装Angular环境的时候有个问题,就是通过命令成功安装了angular cli脚手架工具,但是在终端(win+r cmd)中输入ng version一直提示的是'ng' 不是内部或外 ...

  10. C#中的深度学习(三):理解神经网络结构

    在这篇文章中,我们将回顾监督机器学习的基础知识,以及训练和验证阶段包括哪些内容. 在这里,我们将为不了解AI的读者介绍机器学习(ML)的基础知识,并且我们将描述在监督机器学习模型中的训练和验证步骤. ...