【问题标题】:How can I find out the meaning of an error code when unzipping a file using Perl?使用 Perl 解压缩文件时如何找出错误代码的含义?
【发布时间】:2011-10-13 08:44:45
【问题描述】:

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

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

错误是:

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

【问题讨论】:

  • 执行perldoc -f system 看看它对system 的返回值有何看法。
  • 好主意 - 也许错误代码根本不是来自unzip,而是来自system...
  • secret_brute.zip 有多大?你能把它放在网络上的某个地方吗?
  • 名称$output 具有误导性,因为该变量不包含unzip 命令的输出,而是system 的返回值。
  • 你真的应该use strict; use warnings;。这是学习 perl 的最佳方式,一旦你开始使用它,你就永远不想没有它。

标签: linux perl unzip


【解决方案1】:

这是exit codes from 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;
}

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

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

另一方面,20992 将映射到:

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

【讨论】:

  • 确实,使用 Perl 编程的乐趣。
  • +1 很好的答案。绘制出这些消息让我解决了自己的问题。事实证明,在执行解压缩时,密码可能会出现误报——这会导致尝试解压缩存档并失败:512 错误。密码在 w*** 范围内,所以我最终在系统命令中使用 2&gt;/dev/null 隐藏了任何错误消息,并给它 45 分钟的运行时间!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-26
  • 1970-01-01
  • 2014-05-21
  • 1970-01-01
相关资源
最近更新 更多