用threading和Queue模块实现多线程的端口扫描器
一.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 sys
import socket
import threading
import Queue ports=[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_ip class 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()
效果图:

用threading和Queue模块实现多线程的端口扫描器的更多相关文章
- perl多线程tcp端口扫描器(原创)
		perl多线程tcp端口扫描器(原创) http://bbs.chinaunix.net/thread-1457744-1-1.html perl socket 客户端发送消息 http://blog ... 
- Python中Queue模块及多线程使用
		Python的Queue模块提供一种适用于多线程编程的FIFO实现.它可用于在生产者(producer)和消费者(consumer)之间线程安全(thread-safe)地传递消息或其它数据,因此多个 ... 
- day09  threading, paramiko, queue 模块
		1 模拟ssh 2 锁 内部锁,程序锁,信号量 3 多线程 4 简单消息队列 先来看模拟ssh ,python 的强大之处就是因为有很多模块,可以很简单的完成复杂的事情,今天我们用paramiko ... 
- 再议perl写多线程端口扫描器
		再议perl写多线程端口扫描器 http://blog.csdn.net/sx1989827/article/details/4642179 perl写端口多线程扫描器 http://blog.csd ... 
- python-网络安全编程第六天(threading多线程模块&Queue模块&subprocess模块)
		前言 昨天晚上9点多就睡了 2点起来没睡意... 那就学习吧emmmm ,拿起闲置几天的python课程学习.学习到现在5.58了 总结下 继续开始学习新的内容 多多线程? 线程(英语:thread) ... 
- threading模块和queue模块实现程序并发功能和消息队列
		简介: 通过三个例子熟悉一下python threading模块和queue模块实现程序并发功能和消息队列. 说明:以下实验基于python2.6 基本概念 什么是进程? 拥有独立的地址空间,内存,数 ... 
- Python:使用threading模块实现多线程编程
		转:http://blog.csdn.net/bravezhe/article/details/8585437 Python:使用threading模块实现多线程编程一[综述] Python这门解释性 ... 
- 【Python】 多线程并发threading & 任务队列Queue
		threading python程序默认是单线程的,也就是说在前一句语句执行完之前后面的语句不能继续执行(不知道我理解得对不对) 先感受一下线程,一般情况下: def testa(): sleep(1 ... 
- python学习笔记之使用threading模块实现多线程(转)
		综述 Python这门解释性语言也有专门的线程模型,Python虚拟机使用GIL(Global Interpreter Lock,全局解释器锁)来互斥线程对共享资源的访问,但暂时无法利用多处理器的优势 ... 
随机推荐
- QVariant相当于一个包含大多数Qt数据类型的联合体(源码解读)
			将数据存储为一个Private结构体类型的成员变量d: <qvariant.cpp> 1 QVariant::QVariant(Type type) 2 { create(type, 0) ... 
- vue  笔记1
			created 钩子可以用来在一个实例被创建之后执行代码: new Vue({ data: { a: 1 }, created: function () { // `this` 指向 vm 实例 co ... 
- Dubbo学习(四)  dubbo的特点,8种通信协议之对比
			一.dubbo的特性 (1) 连通性: 注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小 监控中心负责统计各服务调用次数,调用 ... 
- 【转载】css3动画简介以及动画库animate.css的使用
			原文地址:http://www.cnblogs.com/2050/p/3409129.html 在这个年代,你要是不懂一点点css3的知识,你都不好意思说你是个美工.美你妹啊,请叫我前端工程师好不好. ... 
- Spring(2):Spring Ioc
			1.下载spring-framework-3.2.0 完整包下载路径: https://repo.spring.io/webapp/#/artifacts/browse/tree/Properties ... 
- [UVA 10635] Prince ans Princess
			图片加载可能有点慢,请跳过题面先看题解,谢谢 这道题... 还是要点思维的... 第一眼看是个最长公共子序列,但是, \(N\le 62500\) ,并不能 \(O(n^2)\) 求 $ $ 这道题有 ... 
- 如何在Eclipse 中查看(如Objects)的源代码
			今天突然想看Objects的源码,结果失败了,总结了一下,贴出来. 一般查看源码的流程: 使用快捷键Ctri+Shit+T出现Open Type的对话框,在里面直接输入类名,回车就行: 在Eclips ... 
- [POI2012]STU-Well
			题意翻译 给定一个非负整数序列A,每次操作可以选择一个数然后减掉1,要求进行不超过m次操作使得存在一个Ak=0且max(∣xi−xi−1∣)最小,输出这个最小值以及此时最小的k (1≤n≤1 000 ... 
- Fibonacci数列时间复杂度之美妙
			Fibonacci数列: fib(0)=1 fib(1)=1 fib(n)=fib(n-1)+fib(n-2) 上课老师出了一道题,求下列函数的时间复杂度: int fib(int d) { ) ; ... 
- C标准库函数--文件IO操作函数。
			C标准库文件读写函数总结:都是对文件流进行输入输出的函数分为对文件的有格式读写以及无格式读写 一.文件的无格式读写根据每次读写字符的数量,分为三类:1.按字符读写文件 按字符读有三个函数:以下三个函数 ... 
