请关注本头条号,每天坚持更新原创干货技术文章。
如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习
1. nc命令简介
NetCat,在网络工具中有“瑞士军刀”美誉,其有Windows和Linux的版本。因为它短小精悍、功能实用,被设计为一个简单、可靠的网络工具,可通过TCP或UDP协议传输读写数据。同时,它还是一个网络应用Debug分析器,因为它可以根据需要创建各种不同类型的网络连接。
![5ec1a79611f1ea686fd08b0153cabf6d.png](https://i-blog.csdnimg.cn/blog_migrate/4cc97f928239a87da4eae9f50ed59450.jpeg)
netcat简介
以CentOS7.5最小安装版为例,默认情况下系统并没有集成nc工具集,需要手动安装它:
[root@zcwyou ~]# yum install -y nmap-ncat
2. 测试192.168.1.1的TCP80端口是否可以正常连接
[root@zcwyou ~]# nc -v -w 1 192.168.1.1 -z 80
Ncat: Version 7.50
Ncat: Connected to 192.168.1.1:80.
Connected表示连接成功。
![e6079e3123e205c01892a90830651463.png](https://i-blog.csdnimg.cn/blog_migrate/3ea3ce67c2273bb01a22108c3ed55074.jpeg)
linux使用netcat命令检测TCP80端口是否可以正常连接
试试连接81端口
[root@zcwyou ~]# nc -v -w 1 192.168.1.1 -z 81
Ncat: Version 7.50
Ncat: Connection refused.
Connection refused.连接拒绝,表示对方没有打开81端口或者中间防火墙不允许81端口。
3. 使用nc传输文件
大部分时间中,我们都在试图通过网络或者其他工具传输文件。有很多种方法,比如FTP,SCP,SMB等等,但是当你只是需要临时或者一次传输文件,真的值得浪费时间来安装配置一个软件到你的机器上嘛。假设,你想要传一个文件zcwyou.txt 从A到B。A或者B都可以作为服务器或者客户端,以下,让A作为服务器,B为客户端。
Server端配置
[root@zcwyou ~]# nc -l 1567 < zcwyou.txt
Client
[root@zcwyou ~]# nc -n 172.31.100.7 1567 > zcwyou.txt
原理:Server端把zcwyou.txt输入到nc,由nc发送,Client端通过nc接收消息,把它保存到zcwyou.txt。
4. 克隆硬盘或分区
server2上进行类似的监听动作,即把接收的数据重定向给dd:
[root@zcwyou ~]# nc -l -p 1234 | dd of=/dev/sda
server1上把dd后的数据重定向给nc,即发送数据
[root@zcwyou ~]# dd if=/dev/sda | nc 192.168.200.27 1234
注意:克隆硬盘或分区的操作,不应在已经mount的的系统上进行。
5. 指定源端口
假设你的防火墙过滤除25端口外其它所有端口,你需要使用-p选项指定源端口。
服务器端打开监听:
[root@zcwyou ~]# nc -l 1567
客户端发送数据,目标端口1567,源端口25
[root@zcwyou ~]# nc 172.31.100.7 1567 -p 25
使用1024以内的端口需要root权限。
该命令将在客户端开启25端口用于通讯,否则将使用随机端口。
6. 指定源地址
使用-s选项指定源ip地址。
服务器端打开监听,把zcwyou.txt重定向给nc。
[root@zcwyou ~]# nc -u -l 1567 < zcwyou.txt
客户端
[root@zcwyou ~]# nc -u 192.168.100.1 1567 -s 192.168.88.20 > file.txt
当服务器有多个IP时,指定使用192.168.88.20作为源IP。
7. 目录传输
发送一个文件很简单,但是如果我们想要发送多个文件,或者整个目录,一样很简单,只需要使用压缩工具tar,压缩后发送压缩包。
如果你想要通过网络传输一个目录从A到B。
Server端,打包abc目录,并重定向到nc
[root@zcwyou ~]# tar -cvf - abc | nc -l 1567
Client端,通过nc接收数据并由tar解包
[root@zcwyou ~]# nc -n 172.31.100.7 1567 | tar -xvf -
如果想要节省带宽传输压缩包,我们可以使用bzip2或者其他工具压缩。
Server端通过bzip2压缩目录abc并重定向到nc,监听端口1567
[root@zcwyou ~]# tar -cvf - abc | bzip2 -z | nc -l 1567
Client端把接收到的数据通过交给bzip2和tar处理
[root@zcwyou ~]# nc -n 172.16.26.88 1567 | bzip2 -d |tar -xvf -
8. 加密你通过网络发送的数据
如果你担心你在网络上发送数据的安全,你可以在发送你的数据之前用如mcrypt的工具加密。
服务端,使用mcrypt工具加密数据。
[root@zcwyou ~]# nc localhost 1567 | mcrypt –flush –bare -F -q -d -m ecb > zcwyou.txt
客户端,使用mcrypt工具解密数据。
mcrypt -flush -bare -F -q -m ecb < zcwyou.txt | nc -l 1567
以上两个命令会提示需要密码,确保两端使用相同的密码。
这里我们是使用mcrypt用来加密,使用其它任意加密工具都可以。
9. 传输流视频
虽然不是生成流视频的最好方法,但如果服务器上没有特定的工具,使用netcat,我们仍然有希望做成这件事。
服务端读取一个视频文件重定向输出到netcat客户端
[root@zcwyou ~]# cat video.avi | nc -l 1567
客户端通过nc读取内容交给mplayer播放器
[root@zcwyou ~]# nc 172.31.100.7 1567 | mplayer -vo x11 -cache 3000 -
10. 使用UDP协议
默认情况下,nc创建连接时只会连接TCP端口。 不过我们可以使用-u选项来连接到 UDP 端口
[root@zcwyou ~]# ncat -l -u 8888
udp 8888端口已经打开,然后用netstat验证一下端口是否打开。
[root@zcwyou ~]# netstat -tunlp | grep 1234
udp 0 0 0.0.0.0:1234 0.0.0.0:* 17341/nc
udp6 0 0 :::1234 :::* 17341/nc
测试某服务器的UDP端口,比如检查本地是否可以使用阿里DNS服务器223.5.5.5
[root@zcwyou ~]# nc -v -u 223.5.5.5 53
Ncat: Version 7.50
Ncat: Connected to 223.5.5.5:53.
显示Connected即表明成功连接到远程DNS端口,DNS工作正常。
![3da07f497d999bac53235b9304ef6e09.png](https://i-blog.csdnimg.cn/blog_migrate/67a90c71a7c3297ff4271129cbbad2db.jpeg)
linux使用netcat测试服务器的UDP端口
11. 其它用途
使用-t选项模拟Telnet客户端:
HTTP客户端用于下载文件
连接到邮件服务器,使用SMTP协议检查邮件
使用ffmpeg截取屏幕并通过流式传输分享,等等。其它更多用途。
简单来说,只要你了解协议就可以使用netcat作为网络通讯媒介,实现各种客户端。
本文已同步至博客站:
https://www.linuxrumen.com/cyml/781.html
点击了解更多,快速查看更多的技术文章列表。