本意是想获取一个ip段的存活主机的信息,但是使用多线程后,它会重复数据:
获取信息的代码:
try:
ip = IP(self.ip)
except Exception,e:
print '%s %s:' % (colored('[*]','red'),self.ip) + 'ERROR'
exit(-1)
for Ip in ip:
ip = str(Ip)
self.qu.put(ip)
while self.qu.qsize() > 0:
try:
ip = self.qu.get()
r = requests.get('http://'+str(ip),headers=header,timeout=Timeout,allow_redirects=False)
r.encoding = 'utf-8'
status = r.status_code
title = re.search(r'
(.*)', r.text)if title:
title = title.group(1).strip()
else:
title = 'None'
try:
banner = r.headers['server']
except:
pass
screenLock.acquire()
if status == 200 or status == 403 or status == 400:
print '%s Is scanning %s' % (colored('[+]','green'),ip)
print '%s status:%s' % (colored('[-]','blue'),status)
print '%s banner:%s' % (colored('[-]','blue'),banner)
print '%s title:%s' % (colored('[-]','blue'),title)
self.WriteOut('[%s] %s - %s - %s' % (status,ip,banner,title))
except Exception,e:
pass
finally:
screenLock.release()
设置多线程:
for i in range(args.threadNum):
t = threading.Thread(target=scan.run)
t.start()
默认线程数是20