태그 보관물: zip

zip

Netcat에서 다운로드 한 후 손상된 .zip 파일 2 개의

.zipWindows에서 WinRAR을 사용하여 파일을 작성합니다. 메일이나 다른 일반적인 방법으로 파일을 전송하면 Linux와 Windows에서 파일을 열고 추출 할 수 있습니다.

그러나 Netcat을 통해 전송하면 zip 파일이 손상됩니다.

Linux에서으로 netcatted 파일을 추출하려고하면 7z다음과 같은 오류가 발생합니다.

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

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

동일한 netcatted zip 파일을 다시 창으로 이동하여 열려고하면 오류가 발생합니다.

The archive is either in unknown format or damaged.

해당 zip 파일에는 파일이 들어있는 폴더가 있습니다.

내 리눅스 머신은 청취자입니다. 나는이 netcat 솔루션을 사용했습니다 : 여기

나는 그것이 문제가 될 수 있다고 생각했기 때문에 기본 솔루션을 사용했습니다.

  • 리스너 (Linux) :

    nc -lp PORT > file.zip
    
  • 발신자 (Windows, PowerShell) :

    Get-Content ZIP_FILE | ./Netcat32 IP PORT
    

여전히 작동하지 않습니다.

텍스트 파일을 전송하는 데 아무런 문제가 없었으며 압축 파일 만 있으면됩니다.

아래는 동일한 2 개의 zip 파일을 비교 한 것으로, 왼쪽 파일은 netcat을 통해 전송되며 (Linux 또는 Windows에서 열 수 없음), 오른쪽 파일은 메일을 통해 전송됩니다 (둘 다 열 수 있음). 그들은에서 개설되었습니다 gedit.

내가 뭘 잘못하고 어떻게 작동하게합니까?

비교

편집 : Kamil Maciorowski에 따르면 Powercat, Windows 에서이 코드를 사용하여 netcat를 통해 zip 파일을 바이트 스트림으로 보내려고했습니다.

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

이제 리눅스 컴퓨터에는 원래 크기의 6 배 (문제 없음)의 zip 파일이 있으며 그 내용은 각 줄 바꿈에 1-3 자리 숫자입니다. (그러나 -ReadCount 0 태그를 사용했기 때문에 모두 한 줄에 있지 않아야합니까? (-ReadCount 여기 참조 )

그 파일을 열 수 없습니다. 그것을 추출하려고하면 “아카이브가 아닙니다”라는 오류가 발생합니다.

“file.zip”의 파일 형식을 보려면 Linux 명령 파일 을 입력 하십시오. “ASCII TEXT, with CRLF line terminators”

편집 2 :

나는 다른 리눅스 (클라이언트)를 부팅하고 원래 Windows에서 생성 된 SAME 문제가있는 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 명령을 실행하고 싶습니다.

현재 작동하는 솔루션은 powershell 내부에서 호출되는 전체 명령으로 .bat 파일을 만드는 것입니다 …하지만 더 깨끗한 옵션을 갖게되어 기쁩니다.

편집 3 : .bat 파일이 필요하지 않습니다 …에 문제가 invoke-command, invoke-expression, start-job있었지만이 명령은 성공적으로 작동했습니다.

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

Powershell Get-Content명령이 작동 하는 데 문제가 있어서 cmd.exe에서 솔루션을 사용해야했습니다.

질문에 대답하기 전에 Powershell 솔루션을 1-2 일 동안 기다릴 것입니다.



답변

문제는 Netcat이 아니라 PowerShell 명령이 Get-Content작동하는 방식에있었습니다.

cat file.zip > newfile.zipLinux에서 보다 쉬운 것은 PowerShell 대안으로 Windows에서 손상된 zip 파일을 만듭니다.Get-Content file.zip | Out-File newfile.zip

나는 그것을 사용하는 방법을 아직 알지 못했습니다. 아마도 인코딩 문제 일 것입니다. (하지만 -Encoding태그로 모든 유형의 인코딩을 시도했습니다 ). 아무도 대답하지 않으므로 질문을 닫을 것입니다.

다음을 사용하여 해결 방법이 있습니다 cmd.exe.

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


답변