我最近一直在尝试学习 python,但遇到了一些我很难理解它是如何工作的东西。首先,它是一个列表的设计。
有问题的列表来自这篇关于简单模糊测试工具的安全文章:http: //blog.securestate.com/post/2009/10/06/How-a-simple-python-fuzzer-brought-down-SMBv2- in-2-seconds.aspx
有问题的实际列表是:
#Negotiate Protocol Request
packet = [chr(int(a, 16)) for a in """
00 00 00 90
ff 53 4d 42 72 00 00 00 00 18 53 c8 00 00 00 00
00 00 00 00 00 00 00 00 ff ff ff fe 00 00 00 00
00 6d 00 02 50 43 20 4e 45 54 57 4f 52 4b 20 50
52 4f 47 52 41 4d 20 31 2e 30 00 02 4c 41 4e 4d
41 4e 31 2e 30 00 02 57 69 6e 64 6f 77 73 20 66
6f 72 20 57 6f 72 6b 67 72 6f 75 70 73 20 33 2e
31 61 00 02 4c 4d 31 2e 32 58 30 30 32 00 02 4c
41 4e 4d 41 4e 32 2e 31 00 02 4e 54 20 4c 4d 20
30 2e 31 32 00 02 53 4d 42 20 32 2e 30 30 32 00
""".split()]
他使用以下几行从中提取了一个字节(我认为?):
what = packet[:]
where = choice(range(len(packet)))
which = chr(choice(range(256)))
what[where] = which
我从未见过以这种方式设计的列表,而且似乎无法理解它是如何选择它所做的任何事情的。最让我困惑的是packet = [chr(int(a, 16)) for a in """
,他将所有这些东西都放在了一个评论区中......然后确实如此.split()
。0_o
我知道这是一个模糊的问题,但如果有人可以向我解释这一点,或者向我指出一些解释这种列表构建风格的文档的方向,我会非常高兴。这看起来是一种非常有效的存储/提取大量字节的方法。