Total Pageviews

Friday, 21 May 2021

Linux 系统使用 nc 和 pv 命令传输文件

 nc 指代的是”netcat”,但它常常被称作网络调试的瑞士军刀,因为 nc 不仅可以用于网络调试,它还可以生成各种 TCP、UDP 网络连接、进行端口扫描和文件传输等。nc 被认为是一种可以信赖的后台开发工具,因为它自身具有的特性,可以模拟各种网络连接,方便网络程序的开发。

pv  是 Pipe Viewer 的简写,是一种命令行工具,用于监视主机间通过管道进行数据传输的进程。它可以为用户提供一个显示进度条,用以显示数据传输已用时间、数据传输百分比、当前传输速度以及估算的剩余时间等关键信息。

本文将演示如何使用这两条命令共同完成在 Linux 主机间传输文件。

1] 演示环境

  • 主机 A IP 地址:172.16.200.1
  • 主机 B IP 地址:172.16.200.2

重要提示:非常不建议使用 netcat 在公网传输文件,因为它不需要任何登录和认证,只需要知道客户机的 IP 地址和侦听端口即可完成文件传输,这显示是不安全的,所以这种文件传输方式通常仅限于在局域网内使用。

2] 安装 netcat 和 pv

在进行演示之前,需要将  nc 和 pv 工具安装到 Linux 主机,建议使用 Linux 发行版的包管理工具来安装,避免出错:

# yum install nc pv        [基于 RedHat 系统]
# dnf install nc pv        [Fedora 22 及以上版本]
# apt-get install nc pv    [基于 Debian 系统]

如果 pv 找不到安装源,需要手动添加对应的软件源。例如 RHEL/CentOS  系统,创建”/etc/yum.repos.d/ivarch.repo”,内容如下:

[ivarch]
name=RPMs from ivarch.com
baseurl=http://www.ivarch.com/programs/rpms/$basearch/
enabled=1
gpgcheck=1

之后再使用如下命令导入签名文件:

rpm --import http://www.ivarch.com/personal/public-key.txt

完成之后,再使用之前的命令安装。

3] 使用 nc 和 pv 传输文件

假设我们想要传输主机 A 上的文件”CentOS-7-x86_64-Minimal-1810.iso”,则首先在主机 A 运行如下命令:

# tar -zcf - CentOS-7-x86_64-Minimal-1810.iso  | pv | nc -l -p 5555 -w 5

其中:

  • tar -zcf –  为压缩工具,将之后的文件压缩传输,- 表示使用通信管理
  • CentOS-7-x86_64-Minimal-1810.iso 为要压缩传输的文件
  • pv 为显示网络传输情况
  • nc 为网络传输工具,其中 -l 表示为侦听;-p 为侦听的端口,示例使用 5555;-w 为连接超时时限,示例为5秒

此时,就在主机 A 上启动了 nc,并且侦听 5555 端口等待连接进行文件传输。

之后,在主机 B 上运行如下命令连接 nc 主机并接收文件:

# nc 172.16.200.1 5555 | pv | tar -zxf -

现在,就可以直观的查看文件传输过程,并且正常接收文件了。

No comments:

Post a Comment