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. Educational Codeforces Round 37 (Rated for Div. 2) G

    G. List Of Integers time limit per test 5 seconds memory limit per test 256 megabytes input standard ...

  2. CodeForces 599B Spongebob and Joke

    简单题. #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> ...

  3. win7电脑定时开机设置方法

    在BIOS设置主界面中选择“Power Management Setup”,进入“电源管理”窗口. 注:缺省情况下,“Resume By Alarm”定时开机选项是关闭的. 将鼠标移到“Resume ...

  4. C++卷积神经网络实例:tiny_cnn代码具体解释(6)——average_pooling_layer层结构类分析

    在之前的博文中我们着重分析了convolutional_layer类的代码结构.在这篇博文中分析相应的下採样层average_pooling_layer类: 一.下採样层的作用 下採样层的作用理论上来 ...

  5. poj1840Eqs(哈希判重)

    题目链接: 传送门 思路: 这道题是一个简单的hash的应用,假设直接暴力的话肯定承受不了5重for循环,所以比赛的时候我先到分成两组.可是后来用到了很多数组,然后想到数字太大,还先到stl判重, 后 ...

  6. HDU 5405 Sometimes Naive 树链剖分+bit*****

    Sometimes Naive Problem Description   Rhason Cheung had a naive problem, and asked Teacher Mai for h ...

  7. 3.myeclipse 8.5 m1 注册码

    为了能在eclipse 中方便的使用uml,尝试了多次安装各种uml插件未果,myeclipse 自带uml插件,但是要注册啊,要破解啊!!! user:baiduzhidaopassword:oLR ...

  8. github相关

    1 某次release的源码 某次release的源码在release列表中,不在branch中,tag和release是在一起的.所以,下载某个release的源码应该去release中找,而不应该 ...

  9. qemu -net tap配置上网

    1 该选项的用途 让qemu所在的宿主机器的tap网络接口和qemu的vlan n连接起来,从而进一步配置宿主机后,可以让qemu里面的操作系统可以通过vlan n里面的网卡上网. 2 真个系统的架构 ...

  10. hadoop3 无法启动 查找内存消耗原因

    [root@hadoop3 hadoop]# xloStarting namenodes on [hadoop3]上一次登录:三 12月 27 15:07:11 CST 2017pts/24 上had ...