使用NetCat在Linux系统之间传输数据
NetCat命令(nc、ncat)是一个非常方便的网络工具,它被集成在了大多数Linux发行版中。
在《基于babeld和任意隧道软件的动态组网》中使用了nc向babeld发送dump命令,实现了babeld运行状态相关的工作数据输出。
使用NetCat可以也很方便地在能够直接建立网络连接的两台Linux(或Unix)设备之间传输数据。
传送文本数据
假如服务端要给客户端发送一个文本,例子如下:
# 服务端,IP为10.0.0.1,打开12345端口
echo "Hello" | nc -v -l -q 0 -p 12345
# 客户端,访问服务端IP的12345端口
nc 10.0.0.1 12345
客户端运行命令后,连接服务端的相应端口。服务端将Hello文本发送给客户端后退出。客户端终端打印出文本Hello。
以上例子中,-p参数指定要打开的端口号,-q参数指定stdin输入EOF后等待多久后(秒)退出,-v参数要求nc输出详细运行内容(-vv将会输出更详细的运行过程),-l表示监听模式(即运行为服务端)。更多说明可以通过nc -h查看。
传送文件
借助重定向功能,使用nc也可以进行文件传输。由服务端发送文件给客户端的例子如下:
# 服务端,传输test.bin文件给客户端
nc -v -l -q 0 -p 12345 < test.bin
# 客户端,将接收的文件内容输出到test.bin
nc 10.0.0.1 12345 > test.bin
服务端接收来自客户端的文件的例子如下(将-q参数放置在客户端,并调整文件传输方向):
# 服务端,接收来自客户端的文件,并写入test.bin
nc -v -l -p 12345 > test.bin
# 客户端,从test.bin读取文件并发给服务端
nc -q 0 10.0.0.1 12345 < test.bin
传送目录
借助tar命令和管道,可以将整个目录打包、压缩再传输。tar命令的参数中,z表示使用gzip压缩,c表示打包,x表示解包。一个例子如下:
# 服务端,使用tar将test_dir目录打包压缩后传给客户端
tar zc test_dir | nc -v -l -q 0 -p 12345
# 客户端,接收来自服务端的打包数据,并解压缩和解包
nc 10.0.0.1 12345 | tar zx
如果客户端不解包,则也可以直接重定向为一个后缀为tar.gz的文件,实现服务端数据的归档功能。
类似的,也可以实现将客户端将目录打包后发送给服务端解包:
# 服务端,将来自客户端的数据使用tar解压缩和解包
nc -v -l -p 12345 | tar zx
# 客户端,使用tar将test_dir目录打包压缩后传给服务端
tar zc test_dir | nc -q 0 10.0.0.1 12345