使用 Perl 解压缩文件时如何找出错误代码的含义?

Mic*_*per 1 linux perl unzip

我正在尝试在 linux 上使用 perl 解压缩文件。该文件受密码保护,并在暴力攻击中遍历可能的密码(是的,这是一项家庭作业)

我已经隔离并删除了错误代码 20992(密码错误),但仍然收到另一个错误代码,该代码未在文档中的任何地方列出,并且使用 Google 也找不到任何相关内容。

错误是:

512  error:  invalid compressed data to inflate secret_brute.txt
Run Code Online (Sandbox Code Playgroud)

有没有人看到这个错误信息?如果是,是什么意思?

#!/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";
        }
}
Run Code Online (Sandbox Code Playgroud)

编辑

每个请求:Secret_brute.zip

Sin*_*nür 5

这是unzip退出代码列表。

如前所述,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;
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,值512将映射到:

2: 检测到 zipfile 格式的一般错误。无论如何,处理可能已经成功完成;其他存档器创建的一些损坏的 zipfile 具有简单的解决方法。

另一方面,20992将映射到:

82: 由于解密密码错误,没有找到文件。(但是,即使成功处理了一个文件,退出状态也是1。)

  • 确实,用 Perl 编程_是_再次变得有趣。 (2认同)