功能说明:功能强大的网络工具

netcat(nc)是一个简单而有用的工具,不仅可以通过使用TCP或UDP协议的网络连接读写数据,同时还是一个功能强大的网络调试和探测工具,能够建立你需要的几乎所有类型的网络连接

安装:

root@pts/0 # yum -y install nc

帮助:

root@pts/0 # nc -h
usage: nc [-46DdhklnrStUuvzC] [-i interval] [-p source_port][-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_version][-x proxy_address[:port]] [hostname] [port[s]]Command Summary:-4              Use IPv4-6              Use IPv6-D              Enable the debug socket option-d              Detach from stdin-h              This help text-i secs         Delay interval for lines sent, ports scanned-k              Keep inbound sockets open for multiple  connects-l              Listen mode, for inbound connects-n              Suppress name/port resolutions-p port         Specify local port for remote connects-r              Randomize remote ports-S              Enable the TCP MD5 signature option-s addr         Local source address-T ToS          Set IP Type of Service-C              Send CRLF as line-ending-t              Answer TELNET negotiation-U              Use UNIX domain socket-u              UDP mode-v              Verbose-w secs         Timeout for connects and final net reads-X proto        Proxy protocol: "4", "5" (SOCKS) or "connect"-x addr[:port]  Specify proxy address and port-z              Zero-I/O mode [used for scanning]Port numbers can be individual or ranges: lo-hi [inclusive]

man 手册翻译:

NAMEnc — 一个任意的TCP和UDP连接和监听工具SYNOPSISnc [-46bCDdhklnrStUuvZz] [-I length] [-i interval] [-O length] [-P proxy_username] [-p source_port] [-q seconds] [-s source] [-T toskeyword] [-V rtable] [-w timeout][-X proxy_protocol] [-x proxy_address[:port]] [destination] [port]DESCRIPTIONnc (或 netcat) 实用工具用于任何涉及到TCP, UDP, 或 UNIX-domain sockets的场景[不怎么会翻译这个,按大致意思来了原文:The nc (or netcat) utility is used for just about anything under the sun involving TCP, UDP, or UNIX-domain sockets.]. 它可以打开TCP 连接, 发送UDP数据包,监听任意的TCP和UDP端口, 实现端口扫描, 和同时处理IPV4和IPV6. 不同于telnet(1), nc脚本很nice, 并且输出错误信息到标准错误,而不是标准输出, as telnet(1) does with some.常见用法包括:·   简易 TCP 代理·   基于HTTP客户端和服务端的shell脚本·   网络守护进程测试·   一个用于ssh(1)的 SOCKS 或 HTTP 代理命令行 ·   还有很多,很多有以下选项可用:-4      强制nc只使用IPv4地址。-6      强制nc只使用IPV6地址.-b      允许广播.-C      发送CRLF作为换行符.-D      开启debugging 在 socket.-d      不尝试从stdin读取数据.-h      打印nc帮助信息.-I length指定TCP接收缓冲区大小.-i interval指定文本行发送和接收的延时时间.  也可以制造连接到多端口的延时.-k     强制nc持续监听另一个连接直到它的连接完成.  没有 -l 选项是错误的.-l      用于指定nc应该监听一个传入的连接,而不是连接到远程主机.  该选项不能与以下选项联合使用-p, -s, 或 -z 选项.  此外, 任何用-w选项指定的超时会被忽略.-n      任何指定的地址,主机名或端口都不做任何DNS或服务解析.-O length指定TCP发送缓冲区的大小.-P proxy_username指定一个用户名到代理服务器用于请求认证。如果没有指定用户名那么将不会尝试认证。 代理认证功能目前只支持HTTP CONNECT代理.-p source_port指定nc使用的源端口,受到权限和可用性的限制.-q seconds在stdin EOF之后, 等待指定秒数之后再退出. 如果秒数是负数, 永久等待.-r      指定源和/或目标端口随机选择而不是一个范围序列或系统分配的顺序.-S      开启RFC 2385 TCP MD5签名选项.-s source指定IP的接口用于发送数据包.  对于UNIX-domain 数据报 sockets, 指定创建和使用本地临时socket文件这样可以使数据报可以被接收。不可同时使用-l选项.-T toskeyword改变IPv4 TOS值.  toskeyword may be one of critical, inetcontrol, lowcost, lowdelay, netcontrol, throughput, reliability, or one of the DiffServ Code Points: ef, af11... af43, cs0 ... cs7(这句不会翻译); 或者一个十六进制或十进制数. -t      引发nc发送RFC 854 DON'The WON'T响应给RFC 854 DO和WILL请求。这使得使用nc脚本化telnet会话成为可能。-U     限定使用 UNIX-domain sockets.-u      使用UDP代替默认的TCP选项。对于UNIX-domain sockets,使用一个数据报 socket 代替一个 stream socket.如果使用UNIX-domain socket, 除非给定-s标记,否则会在/tmp创建一个临时的receiving socket。-V rtable设置要使用的路由表. 默认是 0.-v     使nc给出更详细的输出.-w timeout无法建立的或者闲置的连接在指定秒数之后超时.  -w标记不会影响到-l选项, 例如. nc 将会不间断的监听一个连接, 无论有没有-w标记.  默认都是不超时的.-X proxy_protocol要求nc使用指定协议连接到代理服务器.  支持的协议有 “4” (SOCKS v.4), “5” (SOCKS v.5) and “connect” (HTTPS proxy).如果不指定协议, SOCKS version 5将会使用.-x proxy_address[:port]要求nc使用指定代理地址和端口连接到目标。如果不指定端口, 使用默认的代理协议端口 (1080 for SOCKS, 3128 for HTTPS).-Z      DCCP mode(数据报拥塞控制协议).-z      指定nc只是扫描正在监听的守护进程,不发送任何数据.  不可和-l选项同时使用。目标可以是一个数字IP地址或字符主机名(除过指定-n选项外). 一般来说, 必须指定目标, 除非给出-l选项 (在这种情况下使用本地主机).  对于 UNIX-domain sockets, 一个目标是必要的,并且是一个socket路径被用于连接(或监听,如果-l选项被给定的话)。端口可以是一个整数或者一个范围的端口号.  端口范围使用这种格式指定nn-mm. 一般来说, 一个目标端口必须被指定, 除非-U选项被给出.客户端/服务器模式使用nc建立一个非常基本的客户端/服务器模式是非常简单的。在一个控制台上,开启nc监听一个指定的端口等待连接。范例:$ nc -l 1234nc现在正在监听1234端口等待连接。在第二个控制台上(或第二台机器), 连接到正在监听的主机端口上:$ nc 127.0.0.1 1234现在应该在端口之间建立了连接。在第二个控制台上的任何键入内容将会串发到第一个控制台上,反之亦然.  在连接建立之后,nc不真正关心哪一方用于‘服务端’,哪一方用于‘客户端’. 连接可以用EOF中断 (‘^D’).在这个netcat没有-c或-e选项, 但是你仍然可以在连接建立之后执行一个命令通过文件描述符重定向的形式。这里务必小心,因为开放一个端口让任何人连接并执行任意的命令在你的站点上是非常危险的。如果你真的想这么做,这里是一个范例:在‘服务器’端:$ rm -f /tmp/f; mkfifo /tmp/f$ cat /tmp/f | /bin/sh -i 2>&1 | nc -l 127.0.0.1 1234 > /tmp/f在‘客户端’:$ nc host.example.com 1234$ (shell prompt from host.example.com)通过这个步骤, 你在‘服务器’端创建了一个fifo在/tmp/f并且使nc监听地址127.0.0.1的1234端口,当一个‘客户端’建立连接成功到那个端口,/bin/sh在‘服务器’端执行并且给‘客户端’shell提示符。当连接终止时,nc同样也会退出。如果你想持续监听,使用-k, 但是命令退出时这个选项将不会重启它或保持nc运行(这句翻译好别扭,贴出原文参考:but if the command quits this option won't restart it or keep nc running.)同样别忘了删掉文件描述符当你不再需要它的时候:$ rm -f /tmp/f数据传输前一个区域的范例可以扩展为构建一个基本的数据传输模式. 任何信息输入的一端将会通过连接输出到另一端, 并且输入和输出可以轻松捕获用于文件传输。首先使用nc监听一个指定端口,并且捕获输出到一个文件:$ nc -l 1234 > filename.out使用第二个机器,连接到nc进程监听的这个端口上,喂给它要传输的文件:$ nc host.example.com 1234 < filename.in在文件完成传输之后,连接会自动关闭。和服务器交谈有时“手工”和服务器交谈比通过一个用户接口更有用。这可以帮助解决故障,当需要验证由客户端发起的请求,服务器发送的什么数据响应到命令行时是有必要的。举个例子,检测网站主页:$ printf "GET / HTTP/1.0\r\n\r\n" | nc host.example.com 80注意这同样显示了web服务器发送的headers.  他们可以使用例如sed(1)之类的工具过滤,如果有必要的话.更多复杂的范例同样可以构建当用户知道服务器需要的请求格式时。再比如,一个email可以使用以下方式提交到一个SMTP服务端:$ nc [-C] localhost 25 << EOFHELO host.example.comMAIL FROM:<user@host.example.com>RCPT TO:<user2@host.example.com>DATABody of email..QUITEOF端口扫描想在目标机器上了解哪些端口开放并且运行服务可能很有用。-z标记可以用于告诉nc报告开放的端口,而不是初始化一个连接。通常通过联合使用-v选项打开详细输出到stderr很有用。例如:$ nc -zv host.example.com 20-30Connection to host.example.com 22 port [tcp/ssh] succeeded!Connection to host.example.com 25 port [tcp/smtp] succeeded!端口范围限定扫描20 - 30,通过升序.你同样可以指定一个要扫描的端口列表,例如:$ nc -zv host.example.com 80 20 22nc: connect to host.example.com 80 (tcp) failed: Connection refusednc: connect to host.example.com 20 (tcp) failed: Connection refusedConnection to host.example.com port [tcp/ssh] succeeded!端口扫描顺序由你给定的次序决定.亦或者,对于知道哪个服务端软件正在运行,是哪个版本可能有用。这些信息通常包含在 greeting banners 。为了获取这些信息,有必要首先制造一个连接,然后当banner获取到的时候破坏掉连接。这可以通过用-w标记指定一个短时间超时,或者可能通过发送一个"QUIT"命令给服务器的方式来获得:$ echo "QUIT" | nc host.example.com 20-30SSH-1.99-OpenSSH_3.6.1p2Protocol mismatch.220 host.example.com IMS SMTP Receiver Version 0.84 Ready其他范例打开一个TCP连接到host.example.com的42端口,使用31337作为源端口,并且设置5秒超时:$ nc -p 31337 -w 5 host.example.com 42打开一个UDP连接到host.example.com的53端口:$ nc -u host.example.com 53打开一个TCP连接到host.example.com的42端口,使用10.1.2.3作为本地端IP用于连接:$ nc -s 10.1.2.3 host.example.com 42创建和监听一个UNIX-domain stream socket:$ nc -lU /var/tmp/dsocket连接到host.example.com的42端口,通过10.2.3.4上的8080端口的HTTP代理连接。这个范例同样可以使用ssh(1)实现; 更多信息请参考ssh_config(5)中的ProxyCommand directive。$ nc -x10.2.3.4:8080 -Xconnect host.example.com 42同样的范例,这次使用“ruser”用户名开启代理认证,如果代理需要认证的话:$ nc -x10.2.3.4:8080 -Xconnect -Pruser host.example.com 42SEE ALSOcat(1), ssh(1)AUTHORSOriginal implementation by *Hobbit* ⟨hobbit@avian.org⟩.Rewritten with IPv6 support by Eric Jackson <ericj@monkey.org>.Modified for Debian port by Aron Xu ⟨aron@debian.org⟩.CAVEATSUDP port scans using the -uz combination of flags will always report success irrespective of the target machine's state.  However, in conjunction with a traffic sniffer either onthe target machine or an intermediary device, the -uz combination could be useful for communications diagnostics.Note that the amount of UDP traffic generated may be limitedeither due to hardware resources and/or configuration settings.

再来一个进阶点的实用小例子

nc -l 1234 |tar -xvf - #目标机上执行
tar -cvf - 目录 |nc 目标机IP 1234 #在被迁移机上执行
#能实现块级别的压缩迁移 。速度是最快的。遇到大量零碎小文件要同步的时候很有用。

转载于:https://blog.51cto.com/chaichuan/2095844

linux nc 详解相关推荐

  1. 《Linux命令详解手册》——Linux畅销书作家又一力作

    关注IT,更要关心IT人,让系统管理员以及程序员工作得更加轻松和快乐.鉴于此, 图灵公司引进了国外知名出版社John Wiley and Sons出版的Fedora Linux Toolbox: 10 ...

  2. Linux系统详解 系统的启动、登录、注销与开关机

    Linux系统详解 第六篇:系统的启动.登录.注销与开关机 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://johncai.blo ...

  3. 每天一个linux命令(25):linux文件属性详解

    每天一个linux命令(25):linux文件属性详解 Linux 文件或目录的属性主要包括:文件或目录的节点.种类.权限模式.链接数量.所归属的用户和用户组.最近访问或修改的时间等内容.具体情况如下 ...

  4. c linux time微秒_学习linux,看这篇1.5w多字的linux命令详解(6小时讲明白Linux)

    用心分享,共同成长 没有什么比每天进步一点点更重要了 本篇文章主要讲解了一些linux常用命令,主要讲解模式是,命令介绍.命令参数格式.命令参数.命令常用参数示例.由于linux命令较多,我还特意选了 ...

  5. Linux系统结构 详解

    Linux系统结构 详解 标签: 产品产品设计googleapple互联网 2011-01-07 14:14 31038人阅读 评论(6) 收藏 举报 分类: Linux(21) 版权声明:本文为博主 ...

  6. 《嵌入式Linux软硬件开发详解——基于S5PV210处理器》——2.2 DDR2 SDRAM芯片

    本节书摘来自异步社区<嵌入式Linux软硬件开发详解--基于S5PV210处理器>一书中的第2章,第2.2节,作者 刘龙,更多章节内容可以访问云栖社区"异步社区"公众号 ...

  7. linux系统服务详解 用于Linux系统服务优化

    linux系统服务详解 用于Linux系统服务优化 服务名        必需(是/否)用途描述        注解 acon              否       语言支持        特别支 ...

  8. linux /proc 详解

    linux /proc 详解 本文整理了一下 linux /proc下的几个常用的目录和文件,可供查阅,之后在学习工作中有别的用到的话会再补充. /proc 简介 Linux系统上的/proc目录是一 ...

  9. linux下载命令 scp,linux命令详解之scp命令

    作用 scp命令常用于linux之间复制文件和目录. scp是secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令. 格式 从本地复制到远程 复制文件 sc ...

最新文章

  1. R语言使用pwr包的pwr.t.test函数对分组样本数相同的t检验进行效用分析(power analysis)、在已知效应量(effect size)、显著性水平、效用值的情况下计算需要的样本量
  2. 【2018ACM山东省赛 - E】Sequence(树状数组,思维,优化)
  3. 【转载】Eclipse vs IDEA快捷键对比大全(win系统)
  4. 使用sharepoint自带的文本编辑器2
  5. 大型网站架构系列:负载均衡详解(4)
  6. 删除数组对象 相同的值 制定数组对象
  7. linux shell实现守护进程 看门狗 脚本
  8. interview-db
  9. 创建win10介质进度为0_MediaCreationTool(Win10介质创建工具) V10.0 官方版
  10. kux播放器android,KUX转换器
  11. win10很多软件显示模糊_Windows 10系统中屏幕字体变模糊,用这3个方法快速解决!...
  12. Python-XML文件读取/添加/修改方法记录(一)
  13. 一些基于 D3.js 的图表库
  14. java base64写入文件_java之文件与base64字符之间的相互转换
  15. 如期而至的SVN服务器迁移引来一个大瓜XAMPP
  16. php-fpm端口占用无法启动
  17. mysql授权连接_MySQL 连接认证授权步骤
  18. R语言基础入门(学习笔记通俗易懂版)
  19. Xcode7与Xcode8及Xcode8.1之间兼容的那些事(持续更新)
  20. 前端开发,用 css3 做一个求婚小动画

热门文章

  1. C中strcpy函数实现
  2. 构建安全的Xml Web Service系列之SSL篇
  3. Windows 10 install Pycharm 开发环境
  4. Unencrypted connection refused. Goodbye. Connection closed by foreign host.
  5. 自动化测试报告(ReportNG)手把手教你
  6. Linux 最简单的驱动程序hello world
  7. 提高面试代码质量的三要素
  8. 使用 .NET 实现 Ajax 长连接 (Part 1 - Comet Web Service)
  9. [Silverlight] UI 测试/UI 自动化相关知识
  10. @Conditional 和 @ConditionalOnProperty