【问题标题】:testing - intentionally corrupt a .Z file using 'dd'测试 - 使用 'dd' 故意损坏 .Z 文件
【发布时间】:2014-06-09 23:18:46
【问题描述】:

我正在尝试测试我的 Python 程序,它接收 .zip 或 .Z 文件并分别使用 Python 的 zipfile 模块或 Unix 的 gzip 解压缩它们。在尝试执行任何操作之前,它会确保文件类型是 .zip 或 .Z(在后一种情况下,使用 Unix 的 file 命令)。我想在极少数情况下测试我的错误处理,在这种情况下,经过验证的存档文件在解压缩时出错。所以基本上,我想给它一个损坏的 .Z 文件。

有人建议我可以使用 Unix 的 dd 命令来弄乱一个好的 .Z 文件并将其用作我的错误输入。对于这个用例,我找不到任何使用dd 的示例,希望有人能提供一个简单的示例。我知道我不应该弄乱标题,因为元数据就是告诉我们它是一个 .Z 文件的地方。所以我知道我需要弄乱一些中间和一些结尾......感谢您的帮助。

【问题讨论】:

    标签: linux unix dd


    【解决方案1】:

    您可以使用像 hexedit 这样的十六进制编辑器。

    既然你问了,

    dd if=/dev/urandom of=yourfile.z bs=1024 seek=$((RANDOM%10)) count=1 conv=notrunc
    

    将垃圾重写到文件中前十个随机的 1024b 块中。

    【讨论】:

    • 谢谢你的例子。我最终对原始的 140406 字节文件(original.Z)执行此操作:dd if=original.Z of=truncated.Z bs=1 count=140389。您上面的代码可能会选择第一个块作为随机的 1024 字节块,对吗?这意味着它会在尝试解压缩之前说not in gzip format。我不熟悉 $((%)) 语法。
    • 如果您将 1 添加到 seek 选项的算术运算中,则会解决问题:dd if=/dev/urandom of=yourfile.z bs=1024 seek=$((RANDOM%10+1)) count=1 conv=notrunc
    猜你喜欢
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    相关资源
    最近更新 更多