python多线程扫描端口(线程池)


Posted in Python onSeptember 04, 2019

扫描服务器ip开放端口,用线程池ThreadPoolExecutor,i7的cpu可以开到600个左右现成,大概20s左右扫描完65535个端口,根据电脑配置适当降低线程数

#!/usr/local/python3.6.3/bin/python3.6
# coding = utf-8

import socket
import datetime
import re
from concurrent.futures import ThreadPoolExecutor, wait

DEBUG = False

# 判断ip地址输入是否符合规范
def check_ip(ipAddr):
  compile_ip = re.compile('^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$')
  if compile_ip.match(ipAddr):
    return True
  else:
    return False

# 扫描端口程序
def portscan(ip, port):
  try:
    s = socket.socket()
    s.settimeout(0.2)
    s.connect((ip, port))
    openstr = f'[+] {ip} port:{port} open'
    print(openstr)
  except Exception as e:
    if DEBUG is True:
      print(ip + str(port) + str(e))
    else:
      return f'[+] {ip} port:{port} error'
  finally:
    s.close

#主程序,利用ThreadPoolExecutor创建600个线程同时扫描端口
def main():
  while True:
    ip = input("请输入ip地址:")
    if check_ip(ip):
      start_time = datetime.datetime.now()
      executor = ThreadPoolExecutor(max_workers=600)
      t = [executor.submit(portscan, ip, n) for n in range(1, 65536)]
      if wait(t, return_when='ALL_COMPLETED'):
        end_time = datetime.datetime.now()
        print("扫描完成,用时:", (end_time - start_time).seconds)
        break


if __name__ == '__main__':
  main()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
深入理解python中的闭包和装饰器
Jun 12 Python
python实现三维拟合的方法
Dec 29 Python
django与小程序实现登录验证功能的示例代码
Feb 19 Python
Django框架实现的分页demo示例
May 25 Python
一文了解Python并发编程的工程实现方法
May 31 Python
将matplotlib绘图嵌入pyqt的方法示例
Jan 08 Python
Python %r和%s区别代码实例解析
Apr 03 Python
jupyter notebook 多行输出实例
Apr 09 Python
python怎么提高计算速度
Jun 11 Python
Python中os模块的简单使用及重命名操作
Apr 17 Python
Python Django项目和应用的创建详解
Nov 27 Python
Python matplotlib绘制条形统计图 处理多个实验多组观测值
Apr 21 Python
Python数据分析模块pandas用法详解
Sep 04 #Python
Python实现TCP探测目标服务路由轨迹的原理与方法详解
Sep 04 #Python
基于python全局设置id 自动化测试元素定位过程解析
Sep 04 #Python
Django框架 querySet功能解析
Sep 04 #Python
Django框架 查询Extra功能实现解析
Sep 04 #Python
Django框架 Pagination分页实现代码实例
Sep 04 #Python
python 动态迁移solr数据过程解析
Sep 04 #Python
You might like
thinkPHP导出csv文件及用表格输出excel的方法
2015/12/30 PHP
PHP6新特性分析
2016/03/03 PHP
yii2使用ajax返回json的实现方法
2016/05/14 PHP
解决laravel资源加载路径设置的问题
2019/10/14 PHP
WordPress 插件——CoolCode使用方法与下载
2007/07/02 Javascript
javascript处理table表格的代码
2010/12/06 Javascript
关于全局变量和局部变量的那些事
2013/01/11 Javascript
jQuery.Validate验证库的使用介绍
2013/04/26 Javascript
JavaScript实现网页截图功能
2014/10/16 Javascript
jQuery 中DOM 操作详解
2015/01/13 Javascript
js小数计算小数点后显示多位小数的实现方法
2016/05/30 Javascript
js实现二级导航功能
2017/03/03 Javascript
浅析Angular2子模块以及异步加载
2017/04/24 Javascript
layui选项卡效果实现代码
2017/05/19 Javascript
Node.js开发第三方微信公众平台
2017/06/05 Javascript
Vue2.0中集成UEditor富文本编辑器的方法
2018/03/03 Javascript
vue通过style或者class改变样式的实例代码
2018/10/30 Javascript
原生js添加一个或多个类名的方法分析
2019/07/30 Javascript
vue组件库的在线主题编辑器的实现思路
2020/04/03 Javascript
JavaScript实现点击自制菜单效果
2021/02/02 Javascript
[56:35]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第一局
2016/03/06 DOTA
Python实现对PPT文件进行截图操作的方法
2015/04/28 Python
Python实现快速排序和插入排序算法及自定义排序的示例
2016/02/16 Python
Django验证码的生成与使用示例
2017/05/20 Python
tensorflow训练中出现nan问题的解决
2018/02/10 Python
python dlib人脸识别代码实例
2019/04/04 Python
详解python配置虚拟环境
2019/04/08 Python
使用Python实现将list中的每一项的首字母大写
2019/06/11 Python
python如何通过twisted搭建socket服务
2020/02/03 Python
使用matplotlib动态刷新指定曲线实例
2020/04/23 Python
三年大学生活自我鉴定
2014/01/21 职场文书
大学活动邀请函
2014/01/28 职场文书
给孩子的新年寄语
2014/04/08 职场文书
《东方明珠》教学反思
2014/04/20 职场文书
应届生找工作求职信
2014/06/24 职场文书
少先队中队工作总结
2015/08/14 职场文书