博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用threading和Queue模块实现多线程的端口扫描器
阅读量:5235 次
发布时间:2019-06-14

本文共 2572 字,大约阅读时间需要 8 分钟。

一.Queue模块基础

q = Queue.Queue()    

q.qsize()           返回队列的大小  
q.empty()         如果队列为空,返回True,反之False  
q.full()          如果队列满了,返回True,反之False
q.full              与 maxsize 大小对应  
q.get([block[, timeout]]) 获取队列,timeout等待时间  
q.get_nowait()         相当q.get(False)
q.put(item)           写入队列,timeout等待时间  
q.put_nowait(item)    相当q.put(item, False)
q.task_done()         在完成一项工作之后,q.task_done() 函数向任务已经完成的队列发送一个信号
q.join()             实际上意味着等到队列为空,再执行别的操作

二.threading模块基础

t = threading.Thread             使用它来创建线程
t.start()                           开始线程的执行
t.run()                           包含了线程实际执行的内容
t.join(timeout=None)               被调用 join() 方法的线程会一直阻塞调用者的线程,直到自己结束
t.name                           用于鉴别进程的一个字符串
t.getName()/t.setName()           为后向兼容而保留的方法,现在请直接通过 name 属性来访问
t.ident                           如果线程还未开始,则值为 None
t.is_alive()                       返回本进程是否是 alive 状态
t.daemon                       标明本进程是否为“daemon thread”。一定要在 start() 被调用前设定,否则引发 RuntimeError。
t.isDaemon() / t.setDaemon()        为后向兼容而保留的方法,现在请直接访问 daemon 属性
lock = threading.Lock
lock.acquire(blocking=True,timeout=-1)        获取一个锁
lock.release()                              释放一个锁

三.多线程端口扫描器

# -*- coding: utf-8 -*-__author__ = 'Dleo'import sysimport socketimport threadingimport Queueports=[21,80,445,3389]queue = Queue.Queue()def ip_c(ip):    new_ip = []    for ip_c in range(1,255):        new_ip.append(str(ip) + "." + str(ip_c))        #print new_ip    return new_ipclass ThreadNum(object):    def __init__(self, queue):        self.queue = queue        self.lock = threading.Lock()    def port_open(self):        while True:            try:                try:                    ip = self.queue.get(timeout=1)                except:                    break                for port in ports:                    socket.setdefaulttimeout(0.5)                    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)                    if s.connect_ex((ip, port)) == 0:                        self.lock.acquire()                        print (ip + ':' + str(port) + ' is openning')                        self.lock.release()                    s.close()            except:                pass            self.queue.task_done()    def run (self):        tmp = []        for i in range(255):            t = threading.Thread(target=self.port_open)            t.setDaemon(True)            t.start()            tmp.append(t)        for t in tmp:            t.join()            if __name__ == '__main__':    if len(sys.argv) != 2:        print "please put ip like this '127.0.0' "        sys.exit()    ip = sys.argv[1]    for i in ip_c(ip):        queue.put(i)    t = ThreadNum(queue)    t.run()

效果图:

转载于:https://www.cnblogs.com/Dleo/p/5783487.html

你可能感兴趣的文章
Flex的自定义事件(组件)的那些事儿
查看>>
Java打印整数的二进制表示(代码与解析)
查看>>
ubuntu18.04下neo4j的安装
查看>>
阿里&新浪微博比赛相关心得--持续更新
查看>>
大数据学习之Linux(3)
查看>>
5章 软件构建中的设计
查看>>
重定向和转发的区别
查看>>
jmeter-02 JMeter 生成HTML性能报告
查看>>
团队作业第二次—项目选题报告
查看>>
解决 Linux 下 zip 乱码
查看>>
软件工程第二次作业--结队编程
查看>>
iOS UICollectionView 入门 07 点击cell放大图片
查看>>
Android SystemUI源代码分析和修改
查看>>
tomcat 1.支持jsp和servlets的Web服务器 2.还是一个Servlet和JSP容器
查看>>
js比较函数
查看>>
微信小程序wx.showLoading
查看>>
小学生作文妙语(超级超级搞笑版!!!!!!!!!)
查看>>
数据仓库基础(四)ODS、元数据
查看>>
template-string
查看>>
团队任务个人博客--20160426
查看>>