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内置函数bin() oct()等实现进制转换
Dec 30 Python
零基础写python爬虫之抓取糗事百科代码分享
Nov 06 Python
详解Django框架中的视图级缓存
Jul 23 Python
浅谈Tensorflow模型的保存与恢复加载
Apr 26 Python
pycharm安装和首次使用教程
Aug 27 Python
Python利用递归实现文件的复制方法
Oct 27 Python
使用python绘制3维正态分布图的方法
Dec 29 Python
使用Python opencv实现视频与图片的相互转换
Jul 08 Python
Python统计时间内的并发数代码实例
Dec 28 Python
详解python方法之绑定方法与非绑定方法
Aug 17 Python
mac安装python3后使用pip和pip3的区别说明
Sep 01 Python
Python requests上传文件实现步骤
Sep 15 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
Yii框架关联查询with用法分析
2014/12/02 PHP
非常实用的PHP常用函数汇总
2014/12/17 PHP
PHP统计目录中文件以及目录中目录大小的方法
2016/01/09 PHP
PHP实现一个限制实例化次数的类示例
2019/09/16 PHP
jquery中常用的SET和GET$(”#msg”).html循环介绍
2013/10/09 Javascript
初识Node.js
2015/03/20 Javascript
基于jQuery实现的旋转彩圈实例
2015/06/26 Javascript
通过node-mysql搭建Windows+Node.js+MySQL环境的教程
2016/03/01 Javascript
JQ中$(window).load和$(document).ready区别与执行顺序
2017/03/01 Javascript
关于jquery form表单序列化的注意事项详解
2017/08/01 jQuery
jQuery EasyUI window窗口使用实例代码
2017/12/25 jQuery
浅谈React Native Flexbox布局(小结)
2018/01/08 Javascript
JavaScript 跨域之POST实现方法
2018/05/07 Javascript
layui获取多选框中的值方法
2018/08/15 Javascript
vuejs点击class变化的实例
2018/09/05 Javascript
如何用vue-cli3脚手架搭建一个基于ts的基础脚手架的方法
2019/12/12 Javascript
[01:09]DOTA2次级职业联赛 - 99战队宣传片
2014/12/01 DOTA
python中wx将图标显示在右下角的脚本代码
2013/03/08 Python
详解在Python的Django框架中创建模板库的方法
2015/07/20 Python
R vs. Python 数据分析中谁与争锋?
2017/10/18 Python
Django中的CBV和FBV示例介绍
2018/02/25 Python
python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别
2018/06/04 Python
Python机器学习库scikit-learn安装与基本使用教程
2018/06/25 Python
Django中的forms组件实例详解
2018/11/08 Python
浅谈python多进程共享变量Value的使用tips
2019/07/16 Python
python使用if语句实现一个猜拳游戏详解
2019/08/27 Python
Python面向对象之私有属性和私有方法应用案例分析
2019/12/31 Python
解决jupyter运行pyqt代码内核重启的问题
2020/04/16 Python
python中的时区问题
2021/01/14 Python
英语专业毕业个人求职自荐信
2013/09/21 职场文书
模具数控专业自荐信
2014/01/27 职场文书
应届毕业生应聘自荐信范文
2014/02/26 职场文书
团队合作精神学习心得体会
2016/01/19 职场文书
蔬果开业典礼发言稿应该怎么写?
2019/09/03 职场文书
2021-4-3课程——SQL Server查询【2】
2021/04/05 SQL Server
elementui的el-popover修改样式不生效的解决
2021/06/30 Javascript