Netcat 下载后损坏的 .zip 文件

Netcat 下载后损坏的 .zip 文件

.zip在 Windows 上使用 WinRAR 创建了一个文件,如果我通过邮件或任何其他常用方式传输该文件,它可以在 Linux 和 Windows 上打开和提取。

但是当我通过 Netcat 传输它时,zip 文件被损坏了。

在 Linux 上,当我尝试使用 提取 netcat 文件时7z,出现如下错误:

Open ERROR: Can not open the file as [zip] archive

WARNINGS:
Headers Error:
There are data after the end of archive

我将相同的 netcat zip 文件移回 Windows 并尝试打开它,但出现错误:

The archive is either in unknown format or damaged.

有问题的 zip 文件包含一个文件夹,其中包含文件。

我的Linux机器是监听器,我使用了这个netcat解决方案:这里

我认为这可能是问题所在,所以我只是使用了基本的解决方案:

  • 监听器(Linux):

      nc -lp PORT > file.zip
    
  • 发件人(Windows、PowerShell):

      Get-Content ZIP_FILE | ./Netcat32 IP PORT
    

仍然不起作用。

请注意,我传输文本文件没有问题,只是传输 zip 文件。

下面是同样的2个zip文件的对比,左边是通过netcat传输的(Linux和Windows都打不开),右边是通过邮件传输的(都可以打开)。它们是在 中打开的gedit

我做错了什么以及如何使其发挥作用?

比较

编辑:根据 Kamil Maciorowski 的说法,我尝试通过 netcat 以字节流的形式发送 zip 文件,在 Powershell、Windows 中使用此代码:

#Sender:
   $contents=Get-Content -Encoding Byte -ReadCount 0 ./file.zip
   echo $contents | ./NetCat32 IP PORT

现在在 Linux 机器上,我有一个 zip 文件,其大小是原始大小的 6 倍(这没有问题),其内容是每个换行符中的 1-3 位数字。(但是,由于我使用了 -ReadCount 0 标签,它们不应该都在一行中吗?(请参阅 -ReadCount这里

我无法打开该文件。尝试提取它时出现错误:“不是档案”。

输入 linux 命令文件查看“file.zip”的文件类型,我得到:“ASCII TEXT,带有 CRLF 行终止符”

编辑2:

我启动了另一个 Linux(作为客户端),尝试传输最初在 Windows 上创建的相同有问题的 zip 文件,并且没有任何问题。

我重新启动 Windows 并在 cmd.exe 中尝试了以下命令:

type file.zip | Netcat32.exe IP PORT
Netcat32.exe IP PORT < file.zip

两者都有效...

我在 powershell 上尝试了同样的操作。我甚至尝试使用get-content所有可用的编码类型 (unknown、utf8、unicode...)。没有成功。

...

看起来问题出在 powershell 和它自己的cat命令同义词( gc, get-content, type, cat) 上。

好的,我必须通过 cmd.exe 运行命令,但如果可能的话,我希望在 powershell 中运行 cmd.exe 命令。

我当前可行的解决方案是拥有一个包含整个命令的 .bat 文件,它在 powershell 内部调用...但我很高兴有一个更干净的选择。

编辑 3:不需要 .bat 文件...我遇到了问题invoke-command, invoke-expression, start-job...但此命令成功运行:

Start-Process cmd -ArgumentList " /c type file.zip | Netcat32.exe IP PORT"

问题出在 PowershellGet-Content命令的工作方式上,所以我不得不使用 cmd.exe 中的解决方案

我将等待 1-2 天以获得 powershell 解决方案,然后再回答这个问题。

答案1

问题不在于 Netcat,而在于 PowerShell 命令的Get-Content工作方式。

在 Linux 中很容易cat file.zip > newfile.zip使用 PowerShell 替代方法在 Windows 上创建一个损坏的 zip 文件Get-Content file.zip | Out-File newfile.zip

我还没搞清楚如何使用它。这可能是一个编码问题。(但我试过所有类型的标签编码-Encoding)。既然没人回答,我就关闭这个问题。

有一个解决方法,使用cmd.exe

cmd /c type file.zip | Netcat32.exe IP PORT

相关内容