Как я могу узнать значение кода ошибки при разархивировании файла с помощью Perl? - PullRequest
1 голос
/ 13 октября 2011

Я пытаюсь разархивировать файл, используя Perl на Linux. Файл защищен паролем, и я перебираю возможный пароль при атаке грубой силы (да, это домашнее задание)

Я изолировал и удалил код ошибки 20992 (неверный пароль), но все еще получаю другой код ошибки, которого нет нигде в документах , и не могу найти что-либо релевантное с помощью The Googles. .

Ошибка:

512  error:  invalid compressed data to inflate secret_brute.txt

Кто-нибудь видел это сообщение об ошибке? Если так, что значит?

#!/usr/bin/perl

@aaaa_zzzz = ("aaaa" .. "zzzz");

foreach(@aaaa_zzzz){
        $output = system("unzip -P $_ -q -o secret_brute.zip");
        if($output  !~ m/20992/){ #  <-- filtering out other error message
                chomp($output);
                print "$_ : $output\n";
        }
}

Редактировать

По запросу: Secret_brute.zip

1 Ответ

4 голосов
/ 13 октября 2011

Вот список кодов выхода из распаковки .

Как уже упоминалось, perldoc -f system объясняет, как получить значение выхода unzip:

Если вы хотите вручную проверить сбой system, вы можете проверить все возможные режимы сбоя, проверив $? следующим образом:

if ($? == -1) {
    print "failed to execute: $!\n";
}
elsif ($? & 127) {
    printf "child died with signal %d, %s coredump\n",
        ($? & 127),  ($? & 128) ? 'with' : 'without';
}
else {
    printf "child exited with value %d\n", $? >> 8;
}

В этом случае значение 512 будет соответствовать:

2: Обнаружена общая ошибка в формате zipfile.Обработка может быть успешно завершена в любом случае;некоторые сломанные zip-файлы, созданные другими архиваторами, имеют простые обходные пути.

С другой стороны, 20992 будет сопоставляться с:

82: не найдены файлы из-за неверных паролей дешифрования.(Однако, если хотя бы один файл успешно обработан, состояние выхода будет 1.)

...