nc的基本用法
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的基本用法的更多相关文章
- nc命令的用法
1.什么是nc netcat(nc)是一个简单而有用的工具,可以使用tcp或者udp进行网络间读写数据,传输文件,接收发送数据,验证网络是否畅通. 2.命令行: 1) -l 用于指定nc将处于侦听模式 ...
- nc命令用法举例
什么是nc nc是netcat的简写,有着网络界的瑞士军刀美誉.因为它短小精悍.功能实用,被设计为一个简单.可靠的网络工具 nc的作用 (1)实现任意TCP/UDP端口的侦听,nc可以作为server ...
- 12. nc/netcat 用法举例
nc命令用法举例 什么是nc nc是netcat的简写,有着网络界的瑞士军刀美誉.因为它短小精悍.功能实用,被设计为一个简单.可靠的网络工具 nc的作用 (1)实现任意TCP/UDP端口的侦听,nc可 ...
- NC 命令引用了一个高手的文章做收藏
什么是nc nc是netcat的简写,有着网络界的瑞士军刀美誉.因为它短小精悍.功能实用,被设计为一个简单.可靠的网络工具 nc的作用 (1)实现任意TCP/UDP端口的侦听,nc可以作为server ...
- linux快速复制大量小文件方法 nc+tar【转】
1,在需要对大量小文件进行移动或复制时,用cp.mv都会显得很没有效率,可以用tar先压缩再解压缩的方式. 2,在网络环境中传输时,可以再结合nc命令,通过管道和tcp端口进行传输. nc和tar ...
- 【转至nmap】nc命令
什么是nc nc是netcat的简写,有着网络界的瑞士军刀美誉.因为它短小精悍.功能实用,被设计为一个简单.可靠的网络工具 nc的作用 (1)实现任意TCP/UDP端口的侦听,nc可以作为server ...
- Spark学习之Spark Streaming
一.简介 许多应用需要即时处理收到的数据,例如用来实时追踪页面访问统计的应用.训练机器学习模型的应用,还有自动检测异常的应用.Spark Streaming 是 Spark 为这些应用而设计的模型.它 ...
- 第五章、 Linux 常用網路指令
http://linux.vbird.org/linux_server/0140networkcommand.php 第五章. Linux 常用網路指令 切換解析度為 800x600 最近更新 ...
- linux监控命令nc用法
一.nc命令检测端口的用法 # nc -v -w 10 %IP% -z %PORT% -v 显示指令执行过程. -w <超时秒数> 设置等待连线的时间. -u 表示使用UDP协议 -z 使 ...
随机推荐
- Toy Storage--POJ2398(计算几何)
http://poj.org/problem?id=2398 这道题和上一道TOYS是一样的 就是输出不一样 还有就是这个给的是乱序 你要先对挡板排序 #include <iostrea ...
- Fractal---POJ2083(dfs)
http://poj.org/problem?id=2083 一道我认为有点恶心的dfs 刚开始没有初始化 用G++交 一直TLE 后来用了C++竟然是wa 那这肯定是我的问题了 ...
- 1370 - Bi-shoe and Phi-shoe(LightOJ1370)(数论基础,欧拉函数)
http://lightoj.com/volume_showproblem.php?problem=1370 欧拉函数: 在数论,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目. φ(n) ...
- 全新开始fighting
a.python准备工作 Python种类: JPython IronPython JavaScriptPython RubyPython CPython ********** ...
- appleid
https://appleid.apple.com/#!&page=signin
- Windows server 2003 + IIS6 搭建Asp.net MVC执行环境
安装.Net Framework4.0. 下载地址: http://www.microsoft.com/zh-cn/download/details.aspx?id=17718 安装WindowsS ...
- ecshop广告宽度值必须在1到1024之间的解决方法
ecshop加广告出现广告位的宽度值必须在1到1024之间的解决方法,这个问题是今天刚刚发现的,我就郁闷了,如今1024宽度的广告能做什么.你看看京东,天猫,非常多都是大型的横幅广告,这点ecshop ...
- iOS7获取UUID以及转换MD5
近期项目开发,运用到要获取UUID转MD5,可是iOS7不能使用获取的UDID的接口(涉及到隐私),获取MAC地址的方式的接口在iOS7下也废弃了.眼下可能的就是获取UUID了,可是在iOS7下,UU ...
- asp.net项目与开源单点登录项目CAS的结合
这段时间搞的一个asp.net mvc项目,采用了单点登录. 这个单点登录就是CAS,一个开源的JAVA项目.当然,这并不影响ASP.NET项目结合它来进行登录.因为各自分工不同:单点登录(管它是不是 ...
- HBase 数据迁移
最近两年负责 HBase,经常被问到一些问题, 本着吸引一些粉丝.普及一点HBase 知识.服务一点阅读人群的目的,就先从 HBase 日常使用写起,后续逐渐深入数据设计.集群规划.性能调优.内核源码 ...