使用模糊库(python)

2024-09-29 03:32:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用这个库:http://pastebin.com/xgPXpGtw(使用示例:http://pastebin.com/fNFAW3Fh) 我有一些问题,因为我不想像他那样把所有字节都拆分成一个数组。

我的测试脚本如下所示:

import random
from random import *

def onerand(packet):
    pack  = packet[:]
    byte = str(chr(choice(range(256))))
    pack[choice(range(len(packet)))]= byte
    print "fuzzing rand byte:%s\n" % (byte.encode("hex"))
    return pack

test = "\x63\x63\x63\x63\x63\x63\x63\x63\x63\x63\x63\x63\x63\x63"

while True:
   print onerand(test)

实际返回:

^{pr2}$

那么我该怎么做才能在测试参数上使用这个函数呢?

谢谢!


Tags: testimportcomhttppacketrangerandombyte
2条回答

在Python中,字符串是不可变的。您向函数onerand传递一个字符串,参数名packet,复制它并给出一个本地名称pack(仍然是一个字符串,因此仍然是不可变的),然后您尝试这样做

pack[whatever] = byte

索引并不重要:您正在尝试修改不可变的字符串。这就是错误信息告诉你的,在我看来,这是尽可能清楚的:你不能这样做。在

I dont want to split in an array all the byte

如果你需要分配一些字符串,那么你肯定不能使用字符串。你对数组有什么看法?import array,用pack = array.array('c', packet)代替pack = packet[:],从此以后{}非常紧凑和快速,也是可变的!在

编辑:你可以用一个列表来完成,就像在公认的答案中那样,但这只是在性能上付出了非常大的相对代价。例如,考虑一下:

^{pr2}$

list是一个比这里真正需要的array.array更一般的结构,在这里选择错误的数据结构会慢7倍多。(Python2.7没有那么可怕,“只是”减速了4倍多,但是,想想买一台比现在快4倍的机器要花多少钱,也许你会同意,即使把速度“仅仅”提高4倍而不是7倍,仍然是一个很值得的副产品;-)。在

不要使用pack = packet[:],而是使用pack = list(packet),然后在末尾使用return ''.join(pack)。在

不能替换字符串的单个字节,但可以将其转换为字符列表,替换一个项,然后再转换回原来的值。在

相关问题 更多 >