def queueRequests(target, wordlists):
engine = RequestEngine(endpoint=target.endpoint,
concurrentConnections=30,
requestsPerConnection=100,
pipeline=False
)
for i in range(30): #创建30个请求,需要和concurrentConnections对应,每条连接发送一个请求
engine.queue(target.req, target.baseInput, gate='race1') #“gate”参数会阻塞每个请求的最后一个字节,直到调用openGate
#等待,直到每个“race1”标记的请求就绪,然后发送每个请求的最后一个字节
engine.openGate('race1') #标识属于同一个并发测试的请求
engine.complete(timeout=60)
def handleResponse(req, interesting):
table.add(req)
这段测试并发的代码和前面扫描目录的有点不一样,并发测试的时候,不是使用队列来发送数据的,上面的代码中同时开启了 30 个连接,然后在第 9 行处添加了 30 个请求,需要注意的是,第9行处的 30 必须和
concurrentConnections 的值一样。接着使用了 gate 参数,这个参数用来标识属于同一个并发测试的请求。
此时,会在30个连接中各放入一个请求,但会留下最后一个字节不发送出去,然后在第 15 行处等待30个连接中的请求都准备好后一起发送最后一个字节,这样服务器就会同时处理30个请求,从而达到了并发测试的目的。
在 17 行会设置最迟60秒后显示结果。
注意:这里需要在HOST下设置一个req的字段,然后后面跟上%s为fuzz点,这样才能正确的进行并发: