NetCat,在网络工具中有“瑞士军刀”美誉,其有Windows和Linux的版本。因为它短小精悍(1.84版本也不过25k,旧版本或缩减版甚至更小)、功能实用,被设计为一个简单、可靠的网络工具,可通过TCP或UDP协议传输读写数据。同时,它还是一个网络应用Debug分析器,因为它可以根据需要创建各种不同类型的网络连接。
netcat(简写是 nc) 是 linux 上非常有用的网络工具,它能通过 TCP 和 UDP 在网络中读写数据。通过配合使用其他工具和重定向,可以在脚本中以多种方式使用它。netcat 所做的就是在两台电脑之间建立链接并返回两个数据流,在这之后所能做的事就看你的想像力了。
安装nc
代码语言:javascript复制yum install -y nc
用法简介
nc [-hlnruz][-g < 网关…>][-G < 指向器数目 >][-i < 延迟秒数 >][-o < 输出文件 >][-p < 通信端口 >][-s < 来源位址 >][-v…][-w < 超时秒数 >][主机名称][通信端口…]
参数说明
- -g <网关> 设置路由器跃程通信网关,最丢哦可设置 8 个。
- -G <指向器数目> 设置来源路由指向器,其数值为 4 的倍数。
- -h 在线帮助。
- -i <延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口。
- -l 使用监听模式,管控传入的资料。
- -n 直接使用 IP 地址,而不通过域名服务器。
- -o <输出文件> 指定文件名称,把往来传输的数据以 16 进制字码倾倒成该文件保存。
- -p <通信端口> 设置本地主机使用的通信端口。
- -r 乱数指定本地与远端主机的通信端口。
- -s <来源位址> 设置本地主机送出数据包的 IP 地址。
- -u 使用 UDP 传输协议。
- -v 显示指令执行过程。
- -w <超时秒数> 设置等待连线的时间。
- -z 使用 0 输入 / 输出模式,只在扫描通信端口时使用。
端口扫描
代码语言:javascript复制nc -v -w 2 192.168.2.34 -z 21-24
//输出
nc: connect to 192.168.2.34 port 21 (tcp) failed: Connection refused
Connection to 192.168.2.34 22 port [tcp/ssh] succeeded!
nc: connect to 192.168.2.34 port 23 (tcp) failed: Connection refused
nc: connect to 192.168.2.34 port 24 (tcp) failed: Connection refused
文件拷贝
代码语言:javascript复制在192.168.2.34上
nc -l 1234 > test.txt
代码语言:javascript复制在192.168.2.33上
nc 192.168.2.34 < test.txt
简单聊天工具
代码语言:javascript复制在192.168.2.34上
nc -l 1234
代码语言:javascript复制在192.168.2.33上
nc 192.168.2.34 1234
这样,双方就可以相互交流了。使用 ctrl C(或 D)退出。
用 nc 命令操作 memcached
- 存储数据:printf “set key 0 10 6rnresultrn” |nc 192.168.2.34 11211
- 获取数据:printf “get keyrn” |nc 192.168.2.34 11211
- 删除数据:printf “delete keyrn” |nc 192.168.2.34 11211
- 查看状态:printf “statsrn” |nc 192.168.2.34 11211
- 模拟 top 命令查看状态:watch “echo stats” |nc 192.168.2.34 11211
- 清空缓存:printf “flush_allrn” |nc 192.168.2.34 11211 (小心操作,清空了缓存就没了)
连接 web 服务器
代码语言:javascript复制//建立从本地1234端口到host.example.com的80端口连接,5秒超时
nc -p 1234 -w 5 host.example.com 80
udp 连接服务器
代码语言:javascript复制nc -u host.example.com 53
连接服务器并执行
代码语言:javascript复制echo -n "GET / HTTP/1.0"r"n"r"n" | nc host.example.com 80
指定 TCP 协议版本
代码语言:javascript复制netcat 的 -4 和 -6 参数用来指定 IP 地址类型,分别是 IPv4 和 IPv6:
//server
nc -4 -l 2389
//client
nc -4 localhost 2389
禁止从标准输入中读取数据
代码语言:javascript复制该功能使用 -d 参数,请看下面例子:
//server side
$ nc -l 2389
//client side
nc -d localhost 2389
强制 Netcat 服务器端保持启动状态
代码语言:javascript复制通常情况下如果连接到服务端的客户端连接断开, 服务端进程也会退出, 如果想让服务端保持存活可以加一个
-k
的参数
//server side
$ nc -k -l 2389
//client side
nc localhost 2389
nc聊天
代码语言:javascript复制server1:
[root@server1 ~]# nc -l 1234
hello!
hi!
代码语言:javascript复制server2:
[root@server2 ~]# nc 192.168.200.27 1234
hello!
hi!