1.命令简介

nc(netcat)是一个短小精悍、功能实用、简单可靠的网络工具,主要有如下作用:
(1)端口侦听,nc 可以作为 server 以 TCP 或 UDP 方式侦听指定端口;
(2)端口扫描,nc 可以作为 client 发起 TCP 或 UDP 请求;
(3)机器之间传输文件;
(4)机器之间网络测速。

nc 实际上是 ncat 的软链接。ncat 是为 Nmap(Network Mapper) 项目编写的,是 Nmap 套件中的一员,它旨在成为可靠的后端工具,可立即为其他应用程序和用户提供网络连接。ncat 不仅可以使用 IPv4 和 IPv6,还可以为用户提供几乎无限的潜在用途。

Nmap 是

2.命令格式

nc [-46DdhklnrStUuvzC] [-i interval] [-p source_port] [-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_protocol] [-x proxy_address[:port]] [hostname] [port[s]]

3.选项说明

-4/6强制只使用 IPv4/IPv6 地址
-D在套接字上启用调试
-d不从 stdin 读取
-h打印出帮助信息
-k强制 nc 在当前连接完成后继续侦听另一个连接。注意如果不使用 -l 选项,则使用此选项是错误的
-l指定 nc 应该侦听传入的连接,而不是启动到远程主机的连接。将此选项与 -p、-s 或 -z 选项结合使用是错误的。此外,使用 -w 选项指定的超时将被忽略
-n不要在任何指定的地址、主机名或端口上执行任何 DNS 或服务查找
-r随机选择源端口和目标端口,而不是按照系统分配的顺序或范围内的顺序选择它们
-S启用 RFC 2385 TCP MD5 签名选项
-t使 nc 发送 RFC 854 DON'T 和 WON'T 响应 RFC 854 的 DO 和 WILL 请求。这使得使用 nc 编写 telnet 会话脚本成为可能
-U指定使用 Unix 域套接字
-u使用 UDP 代替默认选项 TCP
-v显示命令执行过程
-z表示 zero,只扫描侦听守护进程,而不向它们发送任何数据。此选项与 -l 选项结合使用是错误的
-C发送 CRLF 作为换行符
-i interval指定发送和接收的文本之间的延迟时间间隔。还可指定连接到多个端口之间的延迟时间
-p source_port指定 nc 应使用的源端口,但须受特权限制和可用性限制。将此选项与 -l 选项结合使用是错误的
-s source_ip_address设置本地主机送出数据包的 IP 地址。注意将此选项与 -l 选项结合使用是错误的
-T ToS指定连接的 IP 服务类型(TOS)。有效值是标记 ''lowdelay'', ''throughput'', ''reliability'',或以 0x 开头的 8 位十六进制值
-w timeout如果连接和 stdin 空闲超过指定秒数,则连接将被关闭。-w 标志对 -l 选项没有影响。缺省不超时
-X proxy_protocol请求 nc 在与代理服务器对话时使用指定的协议。支持的协议是 “4”(SOCKsv.4)、“5”(SOCKV.5) 和 “connect”(HTTPS proxy)。如果未指定协议,则使用 SOCKS v.5
-x proxy_address[:port]使用指定代理服务器地址和端口连接到主机。如果未指定端口,则使用代理协议的已知端口(SOCKS为1080,HTTPS为3128)

nc 的控制参数不少,常用的几个参数如下所列:

-l指定 nc 将处于侦听模式。指定该参数,则意味着 nc 被当作 server,侦听并接受连接,而非向其它地址发起连接
-p PORT指定 nc 使用的源端口
-s 指定发送数据的源 IP 地址,适用于多网卡机器
-u指定 nc 使用 UDP 协议,默认为 TCP
-v输出交互或出错信息,新手调试时尤为有用
-w超时秒数,后面跟数字
-z表示 zero,扫描时不发送任何数据

4.常用示例

(1)通过 ll 命令查看 nc 命令。

lrwxrwxrwx 1 root root 4 Aug 30 22:33 /usr/bin/nc -> ncat

(2)监听本地端口。
假设在当前命令行终端 A 进行监听。

nc -vl 8888
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Listening on :::8888
Ncat: Listening on 0.0.0.0:8888

开启另外一个命令行终端 B,同样使用 nc 发起连接。

nc -v 127.0.0.1 8888

另一个终端 A 将会收到请求并打印连接信息:

Ncat: Connection from 127.0.0.1.
Ncat: Connection from 127.0.0.1:37229.

如果在终端 B 输入内容,那么终端 A 将收到终端 B 发送的内容并打印到标准输出。

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

receiver:

nc -l 8888 > received.txt

sender:

nc 127.0.0.1 8888 < file.txt

receiver 接收完毕,会自动退出监听。接收文件与原文件 md5 值相同,表示文件接收成功。

md5sum file.txt
8f6aab448ec32637b84c3484a1a44e0b  file.txtmd5sum received.txt
8f6aab448ec32637b84c3484a1a44e0b  received.txt

(4)利用 nc 传输目录。
发送目录与发送文件类似,只不过是利用 tar 先将目录打包成一个文件,然后发送。接收方再利用 tar 进行解压缩还原为目录。

receiver:

nc -l 8888 | tar -xzvf -

sender:

tar -czvf - DIR_NAME | nc 127.0.0.1 8888

注意,tar -f 选项后跟横杠 - 表示从标准输入读取或将结果输出到标准输出。

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

yum install -y dstat

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

nc -l 8888 > /dev/null

第 2 步,在 B 机器发送数据,把无限个 0 发送给 A 机器的 8888 端口。

nc 10.0.1.161 8888 < /dev/zero

在 A 机器新的窗口上使用 dstat 命令查看当前网速。dstat 命令比较直观,它可以查看当前 CPU,磁盘,网络,内存页和系统的一些当前状态指标。我们只需要关注 recv 和 send 两列,分别表示接收和发送的数据,另外注意数字后面的单位 B,KB,MB。

5.FAQ

使用 nc 测试网速时,如果是在同一台机器发送数据,即:

nc 127.0.0.1 8888 < /dev/zero

那么 receiver 将无法收到数据,具体原因还未找到,有知道的网友也麻烦留言告知,万分感谢。


参考文献

[1] nc(1) manual
[2] 博客园.nc命令用法举例
[3] 博客园.nc 命令使用详解

Linux 命令(138)—— nc 命令相关推荐

  1. Linux下利用nc命令来监控检测服务器的端口使用情况

    检测端口还在用telnet?太落伍把 有没有批量检测的方法?有的.我们用nc就可以快速检测端口的开放性. nc检测端口的用法 nc -z  -w 10  %IP%    %PORT% -z表示检测或者 ...

  2. linux的nc命令退出,nc 命令使用详解

    nc 命令介绍: Ncat/nc是一个功能丰富的网络实用程序,可以从命令行跨网络读取和写入数据. Ncat是为Nmap项目编写的,是目前分散的Netcat版本系列的高潮. 它旨在成为可靠的后端工具,可 ...

  3. Linux命令之nc命令

    一.命令简介   nc是netcat的简写,是一个功能强大的网络工具,有着网络界的瑞士军刀美誉.nc命令在linux系统中实际命令是ncat,nc是软连接到ncat.nc命令的主要作用如下: 实现任意 ...

  4. Linux 网络工具——nc命令

    功能说明:强大的网络工具 语 法:nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p&l ...

  5. Linux下使用nc命令测试TCP、UDP

    什么是nc nc是一个简单.可靠的网络测试工具! 开启一个TCP服务器 nc   -l  192.168.1.100    6666 连接TCP服务端: nc   192.168.1.100    6 ...

  6. nc命令可以mysql_Linux系统nc命令怎么使用教程详解

    Linux系统的nc命令是一个网络端口命令,我们可以用来查看网关,设置监听,查看端口等操作.下面由学习啦小编为大家整理了每天一个Linux命令之nc命令详解,希望对大家有帮助! 每天一个Linux命令 ...

  7. Linux 使用NC命令永久监听本地端口

    Linux可以使用nc命令来测试网络端口是否正常,类似于telnet命令,但也可以用nc命令来监听本地端口,支持TCP.UDP协议. 使用案例如下: 1.测试TCP端口 nc -vz ip tcp-p ...

  8. linux命令之nc,emacs,go run,查看文件行数等

    这部分是比较零散的命令,也算是一种科普.因为我在实际的应用中也没有接触这几种命令,不过偶然看到了,那就必须要记录一下.学习嘛,如果只是局限于自己的工作,那视角难免会变小.与君共勉 一.nc命令 nc命 ...

  9. linux—用nc命令监控检测服务器端口

    前端用apache htttpd进行发布(80端口),通过双机负载均衡转发到后端的两个tomcat进行处理(8081和8082端口), 现在需要随时监控这三个端口的情况,一旦down掉需要能够立即告警 ...

最新文章

  1. 直播赠书丨如何高效学习计算机视觉?
  2. my ax 4 faq
  3. 网络套接字(Network socket)
  4. ETL工具kettle的组件--生成记录
  5. B端产品设计——批量导入
  6. hive随机抽取100条数据_用Excel进行随机抽取数据
  7. synchronized 分布式时为什么会失效_10张图,搞懂索引为什么会失效?
  8. 厚积薄发,丰富的公用类库积累,助你高效进行系统开发(10)---各种线程同步的集合类...
  9. 微信服务号开发IOS设备js-sdk认证失败问题总结
  10. HDU 4919 打表找规律 java睑板 map 递归
  11. indesign里怎么打根号_indesign 数学符号
  12. SylixOS --- RMS调度详解
  13. python打开摄像头黑屏怎么办_python、cv2.imshow()、raspberryPi和黑屏
  14. 虚拟服务器和vdi,如何搭建高效虚拟桌面架构(VDI)
  15. 做了两年前端开发,平时就是拿 Vue 写写页面和组件,简历的项目经历应该怎么写得好看?
  16. 「补课」进行时:设计模式(15)——观察者模式
  17. 微信小程序开发动感十足的加载动画--都在这里!
  18. OpenGL超级宝典(第7版)笔记11 帧缓存运算 计算着色器 清单 3.13
  19. 如何用python计算年龄_用Python写一个能算出自己年龄的小程序
  20. 目标检测回归损失函数:SmoothL1/IoU/GIoU/DIoU/CIoU Loss

热门文章

  1. 能让程序员瞬间崩溃的五个瞬间,共鸣的同学请举手!
  2. 解决在使用CSS3制作不间断轮播图中 收尾连接后Interval 延时问题
  3. Smali动态调试方法
  4. OpenJudge 2972(确定进制)
  5. mysql在线备份恢复--Xtrabackup
  6. [导入]ASP.NET2.0中Tabs的简单实现
  7. Spring中的Bean是线程安全的么?
  8. 【iOS开发】理解IBOutlet、Outlet、referencing outlet、outlet connection
  9. java 8 map reduce_java8之Lambda表达式 4:MapReduce开发案例
  10. python写日志到文件_Python日志文件没有正确地写入日志消息,只有格式