关于python设置多线程后数据重复问题
PHP中文网
PHP中文网 2017-04-18 10:01:52
[Python讨论组]

本意是想获取一个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'<title>(.*)</title>', 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

PHP中文网
PHP中文网

认证0级讲师

全部回复(1)
迷茫

你把 self.qu.put(ip) 操作放在了线程里,等于重复执行了 20 次

for Ip in ip:
    ip = str(Ip)
    self.qu.put(ip)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号