import socket,time,re,sys,os,threading
import gevent
from gevent import monkey
monkey.patch_all()socket.setdefaulttimeout(2)#该方法用来处理用户数据的port范围,并计算范围内的port,将其添加到列表中,将列表返回
def handle_port(input_ports):try:pattern = re.compile('(^\d{1,5})-(\d{1,5}$)')match = pattern.match(input_ports)if match:start_port = int(match.group(1))end_port = int(match.group(2))if end_port <=65535 :if start_port < end_port:list =[]for i in range(start_port, end_port+1):list.append(i)return listelse:print("端口范围输入有误")exit(0)else:print("端口格式输入格式有误。")exit(0)except Exception as err:print(err)exit(0)#该方法用来处理用户数据的IP地址范围,并计算范围内的IP地址,将其添加到列表中,将列表返回
def handle_ip(input_addrs):try:pattern = re.compile('(\d{1,3}\.\d{1,3}\.\d{1,3}\.)(\d{1,3})-(\d{1,3})')  # 匹配标准点进制的IPmatch = pattern.match(input_addrs)if match:list = []for i in range(int(match.group(2)),int(match.group(3))+1):addr = match.group(1)+str(i)list.append(addr)return listelse:print("ip地址格式输入有误")exit(0)except Exception as err:print(err)exit(0)#调用socket方法进行tcp端口扫描,client.connect()方法的返回值如果为None,则说明端口开放,若无返回值,说明连接超时,就没有返回值
def scaner(ip,port):try:client = socket.socket()res = client.connect((ip,port))if not res:open_port = []print(ip,":",port," is open")open_port.append((ip,port))return open_portexcept Exception as e:passfinally:client.close()#本方法对传递来的列表ports进行循环,每次循环启动一个协程,在协程内部将port和addr进行配对,并调用scaner方法进行扫描
def coroutine_scan(addr,ports):list = []for port in ports:eve = gevent.spawn(scaner, addr, port)list.append(eve)gevent.joinall(list)#本方法对传递来的列表addrs进行循环,每一次循环启动一个进程,并将addrs循环出来的数据和ports列表传递给coroutine_scan方法
def thread_scan(addrs,ports):for addr in addrs:t = threading.Thread(target=coroutine_scan, args=(addr, ports))t.start()#本方法用来接收参数,并调用handle_port,handle_ip对输入的内容进行处理,然后将返回的列表数据传递给thread_scan
def main():input_addrs = input("输入IP地址范围:如'192.168.0.1-45'\n>>").strip()input_ports = input("输入端口范围:如'1000-1005'\n>>").strip()if len(input_addrs) and len(input_addrs)> 0:ports = handle_port(input_ports)addrs = handle_ip(input_addrs)print("开始扫描.......")thread_scan(addrs,ports)else:print("请输入正确的IP地址范围和端口。")main()if __name__ == "__main__":main()

转载于:https://www.cnblogs.com/yyxianren/p/10694554.html

portscaner 多线程、多协程并发端口扫描相关推荐

  1. gunicorn多进程不死_WEB,gunicorn - 无论是多进程、多线程、协程模式,同一个浏览器窗口多个标签页访问同一个url,看上去不会并发的问题...

    TL;DR 其实是浏览器同一个窗口下限制了对同一个url会执行串行操作. 1.参考 2.现象 我有一个WSGI APP,每次处理request都睡眠5秒.不管多进程.多线程.协程跑WSGI APP,同 ...

  2. 并发编程概念、程序线程进程、线程同步、互斥量、读写锁、协程并发

    多线程: 多线程就是同时执行多个应用程序,需要硬件的支持 同时执行:不是某个时间段同时,cpu切换的比较快,所有用户会感觉是在同时运行 并发与并行: 并行(parallel):指在同一时刻,有多条指令 ...

  3. python 多线程和协程结合_一文讲透 “进程、线程、协程”

    本文从操作系统原理出发结合代码实践讲解了以下内容: 什么是进程,线程和协程? 它们之间的关系是什么? 为什么说Python中的多线程是伪多线程? 不同的应用场景该如何选择技术方案? ... 什么是进程 ...

  4. python进程线程协程区别_Python3多线程与协程

    python中的多线程非常的常用,之前一直糊里糊涂地使用,没有一些系统性的概念,记录一下~ 0x001 多线程的优势:可将长时间占用的程序放到后台 可能会加速程序执行速度 能够实现一些类似同步执行的效 ...

  5. php协程 多线程,【swoole.2.01】多进程,多线程和协程

    前言 在体验swoole的协程功能之前,需要先知道多进程,多线程和协程的区别. 多进程 典型的多进程结构就是耳熟能详的master-worker结构.swoole本身也是由master-maneger ...

  6. 《Kotlin 程序设计》第十二章 Kotlin的多线程:协程(Coroutines)

    第十二章 Kotlin的多线程:协程(Coroutines) Kotlin 1.1 introduced coroutines, a new way of writing asynchronous, ...

  7. python多线程好还是多协程好_深入浅析python中的多进程、多线程、协程

    进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配.任务的调度. ...

  8. Python3多线程与协程测试

    今天简单测试了下python中的多线程与协程,之前在看python的教程中有说到python的多线程其实是在一个线程中来回切换并不会真正的去使用多核资源.如果想真正去利用多核资源,最好的办法是使用py ...

  9. 基于Python3多进程(多线程)+多协程的数据并发处理模版

    图片来源:elenabsl/Shutterstock 上一篇文章<基于Python3单进程+多线程+多协程的生产者-消费者模型示例代码>介绍了如何使用Python在单进程的情况下利用协程并 ...

最新文章

  1. VS2015 Cordova实现WebView加载页面进度条(Android)
  2. ubuntu 命令整合1
  3. MFC动态创建控件并响应事件代码实现过程
  4. 我感到很惭愧的飞鸽传书
  5. Python + Selenium + Chrome 使用代理 auth 的用户名密码授权
  6. 注解@controller的作用_@controller和@Restontroller区别
  7. 机器学习-极大似然估计
  8. ASP.NET理论知识及面试题
  9. golang cover协程异常
  10. android10下载更新功能,Android 10部分新功能曝光 感觉越来越暗黑
  11. 基于微信小程序的扫码签到系统源码
  12. Robcup2D足球学习记录【2020.01.30】
  13. 【MMDblender】MMD烘焙后导入blender贴图颜色错乱问题
  14. Dalvik--Android专属Java虚拟机
  15. Win10 任务栏使用小图标
  16. cgb2111-day01
  17. flv 文件格式解析
  18. django-q快速上手定时任务
  19. 波斯顿动力机器人“特效专辑”
  20. 知行大数据分析平台需求说明

热门文章

  1. Push Notifications
  2. ubuntu中常用指令
  3. 《OpenCV3编程入门》学习笔记9 直方图与匹配(三)直方图对比
  4. c# 小票打印机打条形码_C#打印小票自带条形码打印
  5. java自适应table_【进阶之路】包罗万象——JAVA中的锁
  6. 加载多瓦片地图_手把手教 | 网络时空大数据爬取与分析DAS系统(瓦片地图获取)...
  7. 模拟器不全屏_iOS 14实测GBA游戏模拟器下载
  8. android 汉字编码,Android解压中文乱码
  9. dmmbus地址_dmmbus新地址是多少_动漫台
  10. 电脑怎么连蓝牙耳机_蓝牙耳机怎么关机