Поврежденный файл.zip после загрузки Netcat
Я создаю .zip
файл с WinRAR на моем Windows, его можно открыть и извлечь в Linux, а также в Windows, если я перенесу его по почте или любым другим обычным способом.
Но когда я передаю его через Netcat, почтовый файл поврежден.
В Linux, когда я пытаюсь извлечь netcatted файл с 7z
Я получаю ошибки как:
Open ERROR: Can not open the file as [zip] archive WARNINGS: Headers Error: There are data after the end of archive
Я перемещаю тот же 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.
Ниже приведено сравнение тех же двух zip-файлов: левый передается через netcat (не может быть открыт ни в Linux, ни в Windows), правый - по почте (может быть открыт обоими). Они были открыты в gedit
,
Что я делаю не так и как заставить это работать?
РЕДАКТИРОВАТЬ: Согласно Kamil Maciorowski я пытался отправить zip-файл через netcat в виде потока байтов, используя этот код в 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 (как клиент), попытался передать тот же проблемный zip-файл, который был изначально создан на Windows, и он работал без проблем.
Я загрузился обратно в 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, но я хочу выполнить команду cmd.exe внутри powershell, если это возможно.
Мое текущее решение, которое работает, состоит в том, чтобы иметь файл.bat со всей командой, которая вызывается внутри powershell... Но я был бы рад иметь более чистый вариант.
РЕДАКТИРОВАТЬ 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
Я подожду 1-2 дня для решения PowerShell, прежде чем ответить на вопрос.
1 ответ
Проблема была не в Netcat, а в способе команды PowerShell Get-Content
работает.
Что было так же легко, как cat file.zip > newfile.zip
в Linux создает поврежденный zip-файл в Windows с альтернативой PowerShell Get-Content file.zip | Out-File newfile.zip
Мне еще предстоит выяснить, как его использовать. Это наверное проблема кодирования. (Но я пробовал все типы кодирования с -Encoding
тег). И поскольку никто не отвечает, я закрою вопрос.
Там есть обходной путь, используя cmd.exe
:
cmd /c type file.zip | Netcat32.exe IP PORT