我一直在努力學習python最近,並遇到了一些我很難理解它是如何工作的。首先,它是一個列表的設計。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
我知道這是一個模糊的問題,但如果任何人都可以向我解釋這一點,或者指向一些解釋列表構建風格的文檔,我會非常高興。這看起來像是一種非常有效的方式來存儲/提取大量字節。
這是一個字符串,而不是註釋。 – Marcin
現在開始變得更有意義了!爲什麼3個引號? –
由於多行。 – 2012-05-14 19:45:27