nc网络工具中的瑞士军刀

netcat是网络工具中的瑞士军刀,它能通过TCP和UDP在网络中读写数据。
netcat所做的就是在两台电脑之间建立链接并返回两个数据流,在这之后能做的事就看你的想象力了。你能建立一个服务器,传输文件,与朋友聊天,传输流媒体或者用它作为其他协议的独立客户端。

端口扫描

端口扫描经常被系统管理员和黑客用来发现在一些机器上开放的端口,帮助他们识别系统中的漏洞

1
2
3
4
5
6
nc -z -v -n 172.31.100.7 21-25
可以运行在tcp或udp模式,默认是tcp,-u参数调整为udp
-z 告诉nc使用0 IO,连接成功后立即关闭连接,不进行数据交换
-v 详细输出
-n 告诉netcat不用使用dns反向查询ip地址的域名

一旦发现有开放的端口,你可以容易的使用netcat连接服务抓取他们的banner

1
nc -v 172.31.100.7 21

netcat会连接开放端口21并打印运行在这个端口上服务的banner信息

聊天服务器

1
2
3
4
5
服务端
nc -l 1567
客户端
nc 172.31.100.7 1567

文件传输

1
2
3
4
5
服务端
nc -l 1567 > file.txt
客户端
nc -n 172.31.100.7 1567 < file.txt

打开一个shell

假如你的nc支持-c -e 参数

1
2
3
4
5
服务端
nc -l 1567 -e /bin/bash -i
客户端
nc 172.31.100.7 1567

假如netcat不支持-c、-e参数

1
2
3
4
5
6
7
8
9
10
11
12
13
服务端
mkfifo /tmp/tmp_fifo
cat /tmp/tmp_fifo|/bin/bash -i 2>&1|nc -l 1567> /tmp/tmp_fifo
说明
从网络收到的输入写到fifo文件中
cat命令进程受到输入并把它写会到netcat
netcat通过网络发送输出到client
至于为什么会成功是因为管道使命令平行执行,fifo文件用来替代正常文件,因为fifo使读取等待而如果是一个普通文件,cat命令会尽快结束并开发读取空文件
客户端
nc -n 172.31.100.7 1567

在centos 7中nc已经没有了-z选项 如果想扫描某个端口 可以使用nc -v 127.0.0.1 9000

Linux Netcat 命令——网络工具中的瑞士军刀