@breakerthb
2017-06-06T02:59:43.000000Z
字数 3639
阅读 2272
Linux
NetCat,在网络工具中有“瑞士军刀”美誉,其有Windows和Linux的版本。因为它短小精悍(1.84版本也不过25k,旧版本或缩减版甚至更小)、功能实用,被设计为一个简单、可靠的网络工具,可通过TCP或UDP协议传输读写数据。同时,它还是一个网络应用Debug分析器,因为它可以根据需要创建各种不同类型的网络连接。
通常的Linux发行版中都带有NetCat(简称nc),甚至在拯救模式光盘中也由busybox提供了简版的nc工具。但不同的版本,其参数的使用略有差异。
$ type -a nc
nc is /usr/bin/nc
$ rpm -q nc
nc-1.10-22
建议在使用前,先用man nc看看帮助。这里以红旗DC Server 5.0上的1.10版本进行简单说明。
假设两服务器信息:
server1: 192.168.10.10
server2: 192.168.10.11
$ nc -v -w 10 [IP] -z [PORT]
-v 显示指令执行过程
-w <超时秒数>设置等待连线的时间
-u 表示使用UDP协议
-z 使用0输入/输出模式,只在扫描通信端口时使用
$ nc -v -w 10 -z 192.168.0.100 8080
Connection to 192.168.0.100 8080 port [tcp/http] succeeded!
扫描20到25的端口范围
$ nc -v -w 2 192.168.10.11 -z 21-24
nc: connect to 192.168.10.11 port 21 (tcp) failed: Connection refused
Connection to 192.168.10.11 22 port [tcp/ssh] succeeded!
nc: connect to 192.168.10.11 port 23 (tcp) failed: Connection refused
nc: connect to 192.168.10.11 port 24 (tcp) failed: Connection refused
服务器指定端口开放情况:
1、假如我们要监控一堆指定的IP和端口,可新建一个文件(第1列服务器IP,第2列要监控的端口)。
$ cat /scripts/ip-ports.txt
192.168.0.100 80
192.168.0.100 8081
192.168.0.101 8082
192.168.1.100 21
2、我们可以写这样一个脚本来批量检测端口是否开放:
$ cat /scripts/ncports.sh
#!/bin/bash
#检测服务器端口是否开放,成功会返回0值显示ok,失败会返回1值显示fail
cat /scripts/ip-ports.txt | while read line
do
nc -w 10 -z $line > /dev/null 2>&1
if [ $? -eq 0 ]
then
echo $line:ok
else
echo $line:fail
fi
done
从server1拷贝文件到server2上。
在server2上,监听运行:
$ nc -l 1234 > text.txt
server1上运行:
$ nc 192.168.10.11 1234 < text.txt
注:server2上的监听要先打开
操作与上面的拷贝是雷同的,只需要由dd获得硬盘或分区的数据,然后传输即可。
克隆硬盘或分区的操作,不应在已经mount的的系统上进行。所以,需要使用安装光盘引导后,进入拯救模式(或使用Knoppix工具光盘)启动系统后,在server2上进行类似的监听动作:
$ nc -l -p 1234 | dd of=/dev/sda
server1上执行传输,即可完成从server1克隆sda硬盘到server2的任务:
$ dd if=/dev/sda | nc 192.168.10.11 1234
完成上述工作的前提,是需要落实光盘的拯救模式支持服务器上的网卡,并正确配置IP。
$ while true; do nc -l -p 80 -q 1 < somepage.html; done
提交GET请求,服务器域名为http://www.test.com/。先自己生成个1.txt,写入一些内容:
GET /cgi-bin/webdist.cgi?distloc=;ls HTTP/1.1
Host: 170.168.1.11
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: ASPSESSIONIDAQDBSAQA=LDABJFEDGCCINNBJMHNNPKDI
注意:内容必须以两个空行结尾。这符合rfc2616的标准,否则不会被正确解码的。
$ nc http://www.test.com/ 80 < 1.txt
这个GET请求就发送出去了。你可以完完全全的主机区构造header和data,任何的都可以。
POST /scripts/nsiislog.dll HTTP/1.1
Host: www.test.com
Content-Length: 16758
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: ASPSESSIONIDAQDBSAQA=LDABJFEDGCCINNBJMHNNPKDI
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
然后记住,method要大写就好了:GET,POST,HEAD,SEARCH
nc还可以作为简单的字符下聊天工具使用,同样的,server2上需要启动监听:
server2上启动:
$ nc -lp 1234
server1上传输:
$ nc 192.168.10.11 1234
这样,双方就可以相互交流了。使用Ctrl+D正常退出。
从server1拷贝nginx-0.6.34目录内容到server2上。需要先在server2上,用nc激活监听,
server2上运行:
$ nc -l 1234 | tar xzvf -
server1上运行:
$ tar czvf - nginx-0.6.34 | nc 192.168.10.11 1234
1)存储数据:printf “set key 0 10 6rnresultrn” |nc 192.168.10.11 11211
2)获取数据:printf “get keyrn” |nc 192.168.10.11 11211
3)删除数据:printf “delete keyrn” |nc 192.168.10.11 11211
4)查看状态:printf “statsrn” |nc 192.168.10.11 11211
5)模拟top命令查看状态:watch “echo stats” |nc 192.168.10.11 11211
6)清空缓存:printf “flush_allrn” |nc 192.168.10.11 11211 (小心操作,清空了缓存就没了)