跳转到主要内容

将二进制数据转换为十六进制格式并从中恢复

项目描述

它是关于什么的?

  • dump 二进制到十六进制并 恢复

  • Linux / Windows / OS X

  • Python 2/3

  • 库和命令行工具

命令行

从命令行执行hexdump.py有以下三种方式

$ python hexdump.py
$ python hexdump-3.2.zip

# after installing with `pip install hexdump`
$ python -m hexdump

以十六进制形式转储二进制数据

$ python -m hexdump binary.dat
0000000000: 00 00 00 5B 68 65 78 64  75 6D 70 5D 00 00 00 00  ...[hexdump]....
0000000010: 00 11 22 33 44 55 66 77  88 99 AA BB CC DD EE FF  .."3DUfw........

从保存的十六进制转储中恢复二进制数据

$ python -m hexdump --restore hexdump.txt > binary.dat

基本API

dump(binary, size=2, sep=’ ‘)

将二进制数据(Python 3中的bytes和Python 2中的str)转换为类似于‘00 DE AD BE EF’的字符串。size 参数指定文本块长度,而 sep 设置块分隔符。

dehex(hextext)

辅助函数,将十六进制字符串转换为二进制数据,如果需要,从 hextext 中删除空白字符。

高级API:写入完整转储

Python 2

>>> hexdump('\x00'*16)
00000000: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................

Python 3

>>> hexdump('\x00'*16)
...
TypeError: Abstract unicode data (expected bytes)
>>> hexdump.hexdump(b'\x00'*16)
00000000: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................

Python 3的字符串是抽象Unicode表中的索引序列。每个索引指向一个符号,该符号不指定其二进制值。要将符号转换为二进制数据,您需要查找编码中的索引值对应的二进制值。

以下是相同俄语文本在从Python 3的抽象Unicode整数转换为Windows-1251编码的字节和UTF-8编码的字节时的样子。

>>> message = 'интерференция'
>>> hexdump(message.encode('windows-1251'))
00000000: E8 ED F2 E5 F0 F4 E5 F0  E5 ED F6 E8 FF           .............
>>> hexdump(message.encode('utf-8'))
00000000: D0 B8 D0 BD D1 82 D0 B5  D1 80 D1 84 D0 B5 D1 80  ................
00000010: D0 B5 D0 BD D1 86 D0 B8  D1 8F                    ..........

高级API:从不同的十六进制转储格式恢复二进制数据

Python 2

>>> res = restore(
... '0010: 00 11 22 33 44 55 66 77  88 99 AA BB CC DD EE FF  .."3DUfw........')
>>> res
'\x00\x11"3DUfw\x88\x99\xaa\xbb\xcc\xdd\xee\xff'
>>> type(res)
<type 'str'>

Python 3

>>> res = restore(
... '0010: 00 11 22 33 44 55 66 77  88 99 AA BB CC DD EE FF  .."3DUfw........')
>>> res
b'\x00\x11"3DUfw\x88\x99\xaa\xbb\xcc\xdd\xee\xff'
>>> type(res)
<class 'bytes'>

运行自测

手动

$ hexdump.py --test output.txt
$ diff -u3 hextest.txt output.txt

自动使用 tox

$ tox

问题

Q:为什么在已经有binascii的情况下还要创建另一个模块?
A: binascii.unhexlify() 会因空白符和换行符而阻塞。
hexdump.dehex() 没有这个问题。

如果您还有其他问题,请随时在https://bitbucket.org/techtonik/hexdump/提交问题

变更日志

3.3 (2015-01-22)
  • 如果指定“-”作为dump和restore的输入,则从sys.stdin接受输入(问题#1)

  • 添加了normalize_py()辅助函数,以在Windows上将sys.stdout设置为二进制模式

3.2 (2015-07-02)
  • hexdump现在在所有平台上都打包为.zip文件(在Linux上创建的存档为tar.gz)

  • .zip文件可执行!尝试python hexdump-3.2.zip

  • dump()现在接受可配置的分隔符,由Ian Land修复(PR #3)

3.1 (2014-10-20)
  • 实现了针对Python 3的神秘编码问题的解决方案(请参阅修订版本51302cf)

  • 修复了在UTF-8不是默认编码的系统(Windows)上安装Python 3的问题,感谢George Schizas(问题是由读取README.txt引起的)

3.0 (2014-09-07)
  • 移除了未使用的int2byte()辅助函数

  • 添加了dehex(text)辅助函数,将十六进制字符串转换为二进制数据

  • 向dump()辅助函数添加了“size”参数,用于指定数据块长度

2.0 (2014-02-02)
  • 向命令行模式添加了–restore选项,可以从十六进制转储中获取二进制数据

  • 支持使用–test logfile保存测试输出

  • 从无空格的十六进制字符串恢复

  • 如果输入数据不是字符串,则restore()现在将引发TypeError

  • 在Python 2.x中,当请求生成器时,hexdump()和dumpgen()现在不返回unicode字符串

1.0 (2013-12-30)
  • 地址长度从10减少到8

  • hexdump()新增了‘result’关键字参数,可以是‘print’,‘generator’或‘return’

  • 实际的转储逻辑现在位于新的dumpgen()生成器函数中

  • 新增了dump(binary)函数,它接受二进制数据并返回类似“66 6F 72 6D 61 74”的字符串

  • 新增了genchunks(mixed, size)函数,它对序列和文件对象进行分块

0.5 (2013-06-10)
  • hexdump现在也是一个命令行实用程序(尚未提供restore功能)

0.4 (2013-06-09)
  • 修复了在非英语版本的Windows上使用Python 3进行安装的问题,感谢George Schizas

0.3 (2013-04-29)
  • 完全兼容Python 3

0.2 (2013-04-28)
  • restore()可以恢复从十六进制转储中提取的原始二进制数据,支持native、Far Manager和Scapy文本格式(其他格式也可能有效)

  • restore()兼容Python 3

0.1 (2013-04-28)
  • 适用于Python 2的有效的hexdump()函数

发布清单

[ ] 运行测试
[ ] 在hexdump.py中更新版本
[ ] 在README.txt中的ChangeLog中从hexdump.py更新版本
[ ] 运行python setup.py register sdist upload

许可证

公共领域

致谢

anatoly techtonik <techtonik@gmail.com>
George Schizas
Ian Land

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

hexdump-3.3.zip (12.7 kB 查看散列值)

上传时间

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面