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操作摄像头截图实现远程监控的例子
Mar 25 Python
Python动态加载模块的3种方法
Nov 22 Python
python分析nignx访问日志脚本分享
Feb 26 Python
python获取当前日期和时间的方法
Apr 30 Python
详解Python在七牛云平台的应用(一)
Dec 05 Python
python opencv之分水岭算法示例
Feb 24 Python
python中的句柄操作的方法示例
Jun 20 Python
python将类似json的数据存储到MySQL中的实例
Jul 12 Python
在Python3 numpy中mean和average的区别详解
Aug 24 Python
基于python实现从尾到头打印链表
Nov 02 Python
Python3如何在服务器打印资产信息
Aug 27 Python
降低python版本的操作方法
Sep 11 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
PHP 日期时间函数的高级应用技巧
2009/10/10 PHP
PHP中file_exists与is_file,is_dir的区别介绍
2012/09/12 PHP
php读取der格式证书乱码解决方法
2015/06/22 PHP
实例讲解如何在PHP的Yii框架中进行错误和异常处理
2016/03/17 PHP
ThinkPHP中where()使用方法详解
2016/04/19 PHP
php微信开发接入
2016/08/27 PHP
jquery插件之easing 动态菜单
2010/08/21 Javascript
JS+css 图片自动缩放自适应大小
2013/08/08 Javascript
js判断IE浏览器版本过低示例代码
2013/11/22 Javascript
JS提交form表单实例分析
2015/12/10 Javascript
拥Bootstrap入怀——导航栏篇
2016/05/30 Javascript
jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法
2016/08/25 Javascript
js实现将json数组显示前台table中
2017/01/10 Javascript
VUE多层路由嵌套实现代码
2017/05/15 Javascript
AngularJS获取json数据的方法详解
2017/05/27 Javascript
浅谈vue后台管理系统权限控制思考与实践
2018/12/19 Javascript
layui use 定义js外部引用函数的方法
2019/09/26 Javascript
Python基本语法经典教程
2016/03/11 Python
Python 中开发pattern的string模板(template) 实例详解
2017/04/01 Python
python实现时间o(1)的最小栈的实例代码
2018/07/23 Python
python+pyqt5实现KFC点餐收银系统
2019/01/24 Python
Python3.8对可迭代解包的改进及用法详解
2019/10/15 Python
python3格式化字符串 f-string的高级用法(推荐)
2020/03/04 Python
利用Python裁切tiff图像且读取tiff,shp文件的实例
2020/03/10 Python
python中逻辑与或(and、or)和按位与或异或(&、|、^)区别
2020/08/05 Python
Python二元算术运算常用方法解析
2020/09/15 Python
python调用百度API实现人脸识别
2020/11/17 Python
CSS3中的transform属性进行2D和3D变换的基本用法
2016/05/12 HTML / CSS
这76道Java面试题及答案,祝你能成功通过面试
2016/04/16 面试题
绘画设计学生的个人自我评价
2013/09/20 职场文书
制冷与电控专业应届生求职信
2013/11/11 职场文书
广告学毕业生求职信
2014/01/30 职场文书
四查四看剖析材料
2014/02/14 职场文书
《金色的脚印》教后反思
2014/04/23 职场文书
党员四风问题个人对照检查材料
2014/10/26 职场文书
mongodb数据库迁移变更的解决方案
2021/09/04 MongoDB