关于黑帽子中hexdump函数在python3之后的修改

《Python黑帽子:黑客与渗透测试编程之道》书中的TCP代理这一节中hexdump函数是python3之前的写法:

def hexdump(src, length = 16):   
    result = []   
    digits = 4 if isinstance(src, unicode) else 2   
    for i in range(0, len(src), length):
        s = src[i:i+length]
        hexa = b' '.join(['%0*X' % (digits, ord(x)) for x in s])
        text = b''.join([x if 0x20 <= ord(x) < 0x7F else b'.' for x in s])
        result.append( b'%04X  %-*s   %s' % (i, length*(digits + 1), hexa, text))
    print(b'\n'.join(result))

python3之后因为str默认unicode编码,所以:

def hexdump(src, length = 16):
    result = []
    digits = 2 if isinstance(src, str) else 4
    for i in range(0, len(src), length):
        s = src[i:i+length]
        hexa = ' '.join(['%0*X' % (digits, ord(x)) for x in s])
        text = ''.join([x if 0x20 <= ord(x) < 0x7F else '.' for x in s])
        result.append('%04X  %-*s   %s' % (i, length*(digits + 1), hexa, text))
    for i in result:
        print(i)

if __name__ == '__main__':
    hexdump('hello world hello world hello world hello world')

结果为:
0000  68 65 6C 6C 6F 20 77 6F 72 6C 64 20 68 65 6C 6C    hello world hell
0010  6F 20 77 6F 72 6C 64 20 68 65 6C 6C 6F 20 77 6F    o world hello wo
0020  72 6C 64 20 68 65 6C 6C 6F 20 77 6F 72 6C 64       rld hello world
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 字符集和编码简介 在编程中常常可以见到各种字符集和编码,包括ASCII,MBCS,Unicode等字符集。确切的说...
    兰山小亭阅读 8,678评论 0 13
  • 1 字符编码简介 1.1 ASCII ASCII:American Standard Code for Infor...
    hufengreborn阅读 8,425评论 3 23
  • python学习笔记 声明:学习笔记主要是根据廖雪峰官方网站python学习学习的,另外根据自己平时的积累进行修正...
    renyangfar阅读 3,112评论 0 10
  • 生活在很多人眼里,就是一睁眼一闭眼,过了一天是一天的时间而已。大部分的人对待生活的态度只有一种:睁眼吃饭闭眼睡觉,...
    坐化中的古人阅读 975评论 0 1
  • 中华散记 地为床,天为被,花花草草作陪睡。 雷奏歌,云伴舞,神神气气闯江湖。 2012年8月20日 一个人的一生或...
    张中华阅读 224评论 0 2