nc(netcat) 被誉为网络安全界的‘瑞士军刀’,可以用于完成几乎涉及TCP、UDP或者Unix域套接字的任何事。它可以打开TCP连接,发送UDP报文,在任意的TCP和UDP端口监听,进行端口扫描,支持ipv6。不象telnet,nc能够更好地支持脚本,能够将错误消息分离到标准错误,而不是标准输出。nc有四种典型应用:

一、C/S模型

用nc能够非常简单地建立一个基本的C/S模型。
打开控制台,在某个端口上启动nc监听,等待连接。例如,nc在端口1234上启动监听,等待连接:
$ nc -l 1234

在另外一个控制台上(或另外一台机器上),连接该机器上监听的端口 
$ nc 127.0.0.1 1234

现在,端口之间的连接就建立了。连接建立之后,nc并不区分谁是server,谁是client。在任何一端的输入都会发送到另一端。通过发送EOF(^D’)中断连接。

Linux中的nc没有-c或-e选项(可能是安全因素),但是,你仍然能够通过重定向文件描述符在建立连接之后执行命令。注意,打开一个端口,让任何人连接并在你的机器上执行任意命令是危险的。如果你需要这样做,下面有个例子:

在server端:
$ rm -f /tmp/f; mkfifo /tmp/f
$ cat /tmp/f | /bin/sh -i 2>&1 | nc -l 127.0.0.1 1234 > /tmp/f

在client端:
$ nc host.example.com 1234
$ (shell prompt from host.example.com)

通过创建一个FIFO文件/tmp/f,让nc在server端127.0.0.1的端口1234上监听,当一个client成功连接之后,/bin/sh在服务端执行,但执行反馈传送给client端。
当连接中断后,nc也退出。如果要保持连接,使用-k选项,但是如果命令退出,这个选项也不会重启它或保持nc运行。如果不再需要,不要忘记删除该文件描述符。
$ rm -f /tmp/f

二、数据传输

上面的例子可以扩展来建立一个基本的数据传输模型。在连接的一端输入的任何信息将输出到另一端,输入和输出能够很容易被捕捉来模拟文件传输。
nc在一个端口上启动监听,并将输出重定向到一个文件中:
$ nc -l 1234 > filename.out

在另一台机器上,连接nc运行的机器和监听端口,将要传输的文件作为输入:
$ nc host.example.com 1234 < filename.in

当文件传输完毕后,连接自动关闭。

三、和服务器通讯

在解决故障和调试中,有时候手动和服务器通信很有用,而不是通过一个用户界面。比如,当需要验证一个服务器对于client发送的命令有什么响应时。例如,获得一个Web站点的主页:
$ printf "GET / HTTP/1.0\r\n\r\n" | nc host.example.com 80

注意,上述命令也会显示Web服务器发送的页面头部。可以根据需要用sed等工具过滤返回的信息。

可以建立更复杂的例子,当用户知道服务器端要求的请求格式。例如,一封email可以提交给SMTP邮件发送服务器:

$ nc [-C] localhost 25 << EOF
HELO host.example.com
MAIL FROM:<user@host.example.com>
RCPT TO:<user2@host.example.com>
DATA
Body of email.
.
QUIT
EOF

四、端口扫描

有时候需要知道目标机器上哪些端口开放和运行了那些服务。nc可以利用-z标志来获取开放的端口。通常和-v标志一起用来向标准错误输出详细信息。例如:
$ nc -zv host.example.com 20-30
Connection 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 22
nc: connect to host.example.com 80 (tcp) failed: Connection refused
nc: connect to host.example.com 20 (tcp) failed: Connection refused
Connection to host.example.com port [tcp/ssh] succeeded!

有时候需要了解哪些服务软件以及什么版本正在运行。这些信息通常包含在问候标语(greeting banner)中。为了取得这些信息,首先需要建立一个连接,然后当问候标语获得之后再断开连接。这能够通过用-w标志指定一个短暂的超时时间来实现,或者也许能通过发送一个“QUIT”命令给服务器。
$ echo "QUIT" | nc host.example.com 20-30
SSH-1.99-OpenSSH_3.6.1p2
Protocol mismatch.
220 host.example.com IMS SMTP Receiver Version 0.84 Ready

五、例子

1、建立到主机host.example.com端口42的TCP连接,本地源端口为31337,超时时间为5秒
$ nc -p 31337 -w 5 host.example.com 42

2、建立到主机host.example.com端口53的UDP连接
$ nc -u host.example.com 53

3、建立到主机host.example.com端口42的TCP连接,本地源IP地址为10.1.2.3 
$ nc -s 10.1.2.3 host.example.com 42

4、建立和监听一个UNIX域的流套接字
$ nc -lU /var/tmp/dsocket

5、通过HTPP代理10.2.3.4的8080端口连接主机host.example.com的42号端口。这个例子也可以被ssh用到,查询ssh_config的ProxyCommand命令获取更多信息
$ nc -x10.2.3.4:8080 -Xconnect host.example.com 42

6、同样的例子,该例子使能了代理认证,如果代理需要,使用了用户名'ruser'
$ nc -x10.2.3.4:8080 -Xconnect -Pruser host.example.com 42

六、远程监控案例

案例说明:
1、服务器IP地址:23.65.55.252,服务器上运行了一个服务,该服务会将访问该服务器http服务(80端口)的用户IP写到一个文本文件中,文件名为http_rec.txt
2、用户想看每天有哪些IP地址访问,需要用ssh登陆到服务器上,查看文件http_rec.txt增加了哪些IP,比较麻烦
3、需求:用户在客户端能够实时监控远程服务器上文件http_rec.txt的改变

实现步骤:
1、服务器端
$tail -f http_rec.txt | nc 23.65.55.251 5901

2、客户端在5901端口启动监听,一旦有新的IP地址访问服务器,会显示在客户端终端上
$nc -l 23.65.55.251 5901 //23.65.55.251为本机IP地址,不能写localhost

也可以将监控内容写入客户端某个文件
$nc -l 23.65.55.251 5901 > ~/tmp/http_rec.txt &

搞定。

nc的基本用法的更多相关文章

  1. nc命令的用法

    1.什么是nc netcat(nc)是一个简单而有用的工具,可以使用tcp或者udp进行网络间读写数据,传输文件,接收发送数据,验证网络是否畅通. 2.命令行: 1) -l 用于指定nc将处于侦听模式 ...

  2. nc命令用法举例

    什么是nc nc是netcat的简写,有着网络界的瑞士军刀美誉.因为它短小精悍.功能实用,被设计为一个简单.可靠的网络工具 nc的作用 (1)实现任意TCP/UDP端口的侦听,nc可以作为server ...

  3. 12. nc/netcat 用法举例

    nc命令用法举例 什么是nc nc是netcat的简写,有着网络界的瑞士军刀美誉.因为它短小精悍.功能实用,被设计为一个简单.可靠的网络工具 nc的作用 (1)实现任意TCP/UDP端口的侦听,nc可 ...

  4. NC 命令引用了一个高手的文章做收藏

    什么是nc nc是netcat的简写,有着网络界的瑞士军刀美誉.因为它短小精悍.功能实用,被设计为一个简单.可靠的网络工具 nc的作用 (1)实现任意TCP/UDP端口的侦听,nc可以作为server ...

  5. linux快速复制大量小文件方法 nc+tar【转】

    1,在需要对大量小文件进行移动或复制时,用cp.mv都会显得很没有效率,可以用tar先压缩再解压缩的方式.  2,在网络环境中传输时,可以再结合nc命令,通过管道和tcp端口进行传输.  nc和tar ...

  6. 【转至nmap】nc命令

    什么是nc nc是netcat的简写,有着网络界的瑞士军刀美誉.因为它短小精悍.功能实用,被设计为一个简单.可靠的网络工具 nc的作用 (1)实现任意TCP/UDP端口的侦听,nc可以作为server ...

  7. Spark学习之Spark Streaming

    一.简介 许多应用需要即时处理收到的数据,例如用来实时追踪页面访问统计的应用.训练机器学习模型的应用,还有自动检测异常的应用.Spark Streaming 是 Spark 为这些应用而设计的模型.它 ...

  8. 第五章、 Linux 常用網路指令

    http://linux.vbird.org/linux_server/0140networkcommand.php     第五章. Linux 常用網路指令 切換解析度為 800x600 最近更新 ...

  9. linux监控命令nc用法

    一.nc命令检测端口的用法 # nc -v -w 10 %IP% -z %PORT% -v 显示指令执行过程. -w <超时秒数> 设置等待连线的时间. -u 表示使用UDP协议 -z 使 ...

随机推荐

  1. 压力测试webbench(转)

    最近app需要搭建后台,故此研究一下,靠谱的后台服务器..网传nginx 能达到的并发数量比apache 高. LAMP or LNMP ? 根据需求测试结果来进行选择. 首先是安装LNMP测试完后 ...

  2. C# Queue与RabbitMQ的爱恨情仇(文末附源码):Q与MQ消息队列简单应用(二)

    上一章我们讲了队列( Queue),这一章我们讲Message Queue消息队列,简称MQ. 定义: MQ是MessageQueue,消息队列的简称(是流行的开源消息队列系统,利用erlang语言开 ...

  3. Design Pattern Visitor 訪问者设计模式

    訪问者设计模式是已经有了一组Person对象了,然后不同的訪问者訪问这组对象.会有不同效果. 这些訪问者实际上就是一个能够让Person对象组运行的动作行为等. 至于这些Person对象是怎样运行这些 ...

  4. 初探无线安全审计设备WiFi Pineapple Nano系列之PineAP

    前言: 之前曾经介绍过国外无线安全审计设备The WiFi Pineapple Nano的SSLsplit模块和ettercap模块及实验. 在玩WiFi Pineapple Nano 设备的过程中, ...

  5. topcoder srm 552

    div1 250pt: 题意:用RGB三种颜色的球摆N层的三角形,要求相邻的不同色,给出RGB的数量,问最多能摆几个 解法:三种颜色的数量要么是全一样,要么是两个一样,另外一个比他们多一个,于是可以分 ...

  6. 【转载】TCP和TCP/IP的区别

    TCP/IP协议(Transmission Control Protocol/Internet Protocol)叫做传输控制/网际协议, 又叫网络通讯协议,这个协议是Internet国际互联网络的基 ...

  7. SDUT 3503 有两个正整数,求N!的K进制的位数

    有两个正整数,求N!的K进制的位数 题目链接:action=showproblem&problemid=3503">http://sdutacm.org/sdutoj/prob ...

  8. cocos2dx 3.0 显示中文及乱码解决方式

    遇到此问题第一时间在脑子里面联想到android下的strings.xml来做国际化,本文就仅仅针对解析xml来实现cocos2d-x的国际化解决乱码问题. 寻找解决方法的时候在cocos2d-x的c ...

  9. linux入门基础——linux软件管理RPM

    由于linux入门基础是基于CentOS解说的,讲的是CentOS上的软件包管理.ubuntu的软件包管理有这些:ubuntu软件包管理,包管理指南,ubuntu软件包管理. linux软件管理:RP ...

  10. JavaScript基本类型与引用类型

    前面已经说过,JavaScript变量是松散类型,它可以保存任何类型的值.变量的值以及数据类型可以在脚本的生命周期内发生改变.变量包含两种不同类型的值:基本类型和引用类型.基本类型值的是简单的数据段, ...