netcat 是 Linux 系统中的网络工具,其通过 TCP 和 UDP 协议在网络中读写数据。如果与其他工具结合,以及加上重定向功能,还可以实现很多不同的功能。所以其以体积小功能灵活而著称,可以用来做很多网络相关的工作。Posix 版本的 netcat 主要有 GNU 版本和 OpenBSD 两种,都可以在 debian/ubuntu 系统下面安装,但 Windows 系统下则只有 GNU 版本的。
可以通过如下命令查看其版本:
1 | [root@master01 ~]# readlink -f $(which nc) |
安装
1 | yum install -y nc |
常用参数
netcat 使用的基本形式为:
1 | nc 参数 目的地址 端口 |
常用的参数说明如下:
1 | -k 在当前连接结束后保持继续监听 |
常用的实例
端口测试
测试远程注意端口是否打开
1 | nc -vz 192.168.1.8 8080 |
还可以指定同时制定多个端口或者一个端口范围
1 | nc -v -z -w 3 192.168.56.1 22 80 8000 8080 |
连接测试
如果在主机上配置了防火墙,想要测试一下开放的端口是否可以与外界联通,可以用 netcat 监听该端口,然后从外界尝试连接。
在主机上执行:
1 | nc -l -p 8080 |
在其它主机上可以尝试连接以上主机打开的端口:
1 | nc 192.168.1.8 8080 |
如果两台主机能够正常连通的话,就如同打开了一个聊天室,可以相互发送数据并显示。
测试 UDP
1 | nc -vuz 192.168.1.8 8080 |
文件传输
如何两台主机间想要传输文件,而又不能使用 scp/szrz 等工具时,则可以用 netcat 代替。在需要接受文件的主机上执行:
1 | nc -l -p 8080 > test.txt |
然后再另一台主机上向其传输文件:
1 | nc 192.168.1.8 8080 < test.txt |
此外,也可以用 pv 命令来查看文件传输的进度。pv 命令即 Pipe Viewer,意思是通过管道显示数据处理进度的信息。
安装pv
1 | yum install -y pv |
其甚至可以用来代替 cp 命令拷贝文件:
1 | [root@master02 ~]# pv etcd-v3.3.15-linux-amd64.tar.gz >/data/etcd-v3.3.15-linux-amd64.tar.gz |
使用 netcat 来做文件传输时,可以使用 pv 来显示传输的进度:
1 | # 传输端 |
1 | 甚至还可以传输一个目录: |
如何对传输的数据不放心,还可以进行加密,如使用 mcrypt 工具加密数据:
1 | # 服务端,使用 mcrypt 工具加密数据,需要输入密码 |
克隆设备
使用 netcat 可以用来对整个磁盘设备进行复制:
1 | # 服务端 |
HTTP 服务器
用 netcat 可以实现一个简单的 HTTP 服务器,用以测试一些功能。首先,创建一个简单地的 index.html 文件:
1 | <html> |
然后运行服务端:
1 | while : ; do ( echo -ne "HTTP/1.1 200 OK\r\n" ; cat index.html; ) | nc -l -p 8080 ; done |
HTTP 客户端
用 netcat 也可以实现一个简单的 HTTP 服务器,用于请求 HTTP 数据。
1 | printf "GET / HTTP/1.0\r\n\r\n" | nc konghy.cn 80 |
端口扫描
TCP端口扫描
1 | nc -v -z -w2 192.168.0.3 1-100 |
扫描UDP端口
1 | nc -u -z -w2 192.168.0.1 1-1000 //扫描192.168.0.3 的端口 范围是 1-1000 |