7-zip的标准输入输出(STDIN,STDOUT)与Ncat的配合使用,压缩后传输文件

网友投稿 419 2022-10-15


7-zip的标准输入输出(STDIN,STDOUT)与Ncat的配合使用,压缩后传输文件

本文适用于Windows系统。所需要的程序的windows版本在文后有下载连接。

Netcat/Ncat是很好用的网络工具,使用方法网上已经有很多文章讲解了,不再赘述。本文讲述压缩软件7-zip配合Ncat,实现从A机器到B机器的文件压缩传输。也就是说,准备发送的文件先在A机器上压缩,再把压缩之后的数据传送到B机器,在B机器实时解压缩,整个的传输过程对用户来说是透明的。因为流量减小了,网传速度可能得以加快。之所以说“可能”,是因为压缩后传输速度是否得以加快,取决于CPU速度与网络速度之比。如果CPU慢而网速快,那还不如不压缩。如果出现这种情况,就当本文是一片纯技术探讨文把。希望你能在这次短暂的旅行中获得乐趣。

多文件传输方法(只打包不压缩,传送当前目录下所有的TXT文件): 发送端:tar -cv *.txt | ncat --send-only 192.168.1.2 接收端:ncat -l | tar -xvf -

进阶:压缩传输。最简单的方法当然是用WINRAR、7-ZIP之类的软件压缩打包然后再传输,但这需要很大的磁盘暂存空间,其实可以采用“边压缩边传输”的方法,在发送端实时压缩后传输,在接收端实时解压存盘,整个过程对用户透明,也不再需要磁盘暂存空间。有2种方法压缩之后传输:

方法1:用7za压缩/解压: 发送端:tar -cv *.txt|7za a -tgzip -an -so -si|ncat 192.168.1.2 --send-only 接收端:ncat -l|7za x -tgzip -bd -y -si -so|tar -xvf - -C /tmp

命令行解释:7-zip是一款很流行的压缩软件,其命令行版本(7z.exe,7za.exe)支持标准输入(STDIN)和标准输出(STDOUT),也就是参数里的 -si 和 -so(但不支持7Z格式的STDIN/STDOUT)。发送端的tar把当前目录下的所有的txt文件一个一个打包(但不压缩)发送到STDOUT,7za从STDIN接收这些tar包(-si),用gzip格式压缩之后通过管道( -so )喂给Ncat发送出去;接收端的Ncat把收到的压缩数据喂给7za解压成tar包,再喂给tar解包写入磁盘当前盘符的tmp目录之下(不能指定其它盘符)。

目录操作:1、把abc文件夹,及其之下子文件夹的内容传送到接收端,并在接收端的当前目录下重建abc文件夹的结构。

发送端:tar -cv abc | bzip2 | ncat 192.168.1.2 --send-only 接收端:ncat -l | bzip2 -d | tar -xvf - -C .

2、把abc文件夹,及其之下子文件夹的内容(除了txt文件夹,不论在哪一层)传送到接收端,并在接收端的当前目录下重建abc文件夹的结构。

发送端:tar -cv abc --exclude=txt | bzip2 | ncat 192.168.1.2 --send-only

另外,gzip、bzip2、xz这3种格式支持标准输入输出,7z目前不支持,比如换成这样的语句:

发送端:tar -cv *.txt|7za a -txz -an -so -si|ncat 192.168.1.2 --send-only 接收端:ncat -l|7za x -txz -bd -y -si -so|tar -xvf - -C /tmp

方法2:用bzip2压缩/解压: 发送端:tar -cv *.txt|bzip2|ncat 192.168.1.2 --send-only 接收端:ncat -l|bzip2 -d|tar -xvf - -C /tmp

命令行解释:原理与方法1一样,只是把压缩程序换成bzip2。用bzcat替换接收端的bzip2也可以,该程序专职解压缩。

方法3:用lz4压缩/解压: 发送端:tar -cv abc | lz4 stdin -c | ncat 192.168.80.134 --send-only 接收端:ncat -l | lz4 stdin -d -c | tar -xvf - -C .

命令行解释:LZ4是一种压缩/解压速度超快的算法,几乎不占用CPU,但压缩率不太高。

如何证明数据已经被压缩传输了?tar的 -cv 参数仅仅是多文件打包,并没有压缩。打包之后不经过压缩就发送,用Wireshark抓包能发现经Tar的打包的数据,虽然加了包头包尾,但被传输文件的数据并没有变。比如1.txt的内容是ABCDKKAAAAAAAAAAAAAAAAAA,命令如下:

发送端:tar -cv 1.txt|ncat --send-only 192.168.1.2 接收端:ncat -l>1.tar

但经过7za和bzip2压缩的数据,在tcp里无论如何找不到1.txt的内容了。

程序下载地址tar for windows:for windows:for windows:for windows:for windows:https://github.com/lz4/lz4/releases


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:pon设备下onu长发光现象及原理 小结
下一篇:java策略枚举:消除在项目里大批量使用if
相关文章

 发表评论

暂时没有评论,来抢沙发吧~