1. nc命令简介
NetCat,在网络工具中被称为“瑞士军刀”,拥有Windows和Linux版本。由于它简短,实用且实用,因此它被设计成一个简单,可靠的网络工具,可以通过TCP或UDP传输读写数据。同时,它也是一个Web应用程序Debug分析器,因为它可以根据需要创建各种类型的网络连接。
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:版本7.50
Ncat:连接到192.168.1.1: 80。
已连接表示连接成功。
Linux使用netcat命令检测TCP80端口是否可以正常连接。
尝试连接端口81
[root @zcwyou~] #nc -v -w 1 192.168.1.1 -z 81
Ncat:版本7.50
Ncat:连接被拒绝。
拒绝连接。连接被拒绝,表示对方未打开端口81或中间防火墙不允许端口81。
3.使用nc传输文件
大多数情况下,我们尝试通过网络或其他工具传输文件。有很多方法,例如FTP,SCP,SMB等,但是当你只需要暂时或一次传输文件时,真的值得花时间在你的机器上安装和配置软件。假设您要将文件zcwyou.txt从A传递到B. A或B可以用作服务器或客户端。在下面,让A为服务器,B为客户端。
服务器端配置
[root @zcwyou~] #nc -l 1567
[root @ zcwyou~] #nc -n 172.31.100.7 1567>
Zcwyou.txt
原理:服务器将zcwyou.txt发送到nc,由nc发送。客户端通过nc接收消息并将其保存到zcwyou.txt。
4.克隆硬盘或分区
在server2上执行类似的侦听操作,将接收的数据重定向到dd:
[root @zcwyou~] #nc -l -p 1234 | dd=/dev/sda
Server1将dd之后的数据重定向到nc,即发送数据。
[root @ zcwyou~] #dd if=/dev/sda | nc 192.168.200.27 1234
注意:不应在已安装的系统上执行克隆硬盘或分区的操作。
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
客户
[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.
服务器端,包abc目录,并重定向到nc
[root @ zcwyou~] #tar -cvf - abc | nc -l 1567
客户端,通过nc接收数据并通过tar解压缩[root @ zcwyou~] #nc -n 172.31.100.7 1567 | tar -xvf -
如果您想节省传输压缩包的带宽,我们可以使用bzip2或其他工具进行压缩。
服务器端通过bzip2压缩目录abc并将其重定向到nc,监听端口1567
[root @ zcwyou~] #tar -cvf - abc | bzip2 -z | nc -l 1567
客户端将接收到的数据传递给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
以上两个命令将提示输入密码并确保两端使用相同的密码。
这里我们使用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:版本7.50
Ncat:连接到223.5.5.5: 53。
显示连接表示与远程DNS端口的连接成功,并且DNS正常工作。
Linux使用netcat来测试服务器的UDP端口
11.其他用途
使用-t选项模拟Telnet客户端:
用于下载文件的HTTP客户端
连接到邮件服务器并使用SMTP协议检查邮件
使用ffmpeg捕获屏幕并通过流式传输共享它等等。其他更多用途。
简单地说,只要您了解协议,就可以使用netcat作为网络通信媒介来实现各种客户端。