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判断直线和矩形是否相交的方法
Jul 14 Python
Ubuntu安装Jupyter Notebook教程
Oct 18 Python
pygame实现俄罗斯方块游戏(基础篇1)
Oct 29 Python
pyftplib中文乱码问题解决方案
Jan 11 Python
将pytorch转成longtensor的简单方法
Feb 18 Python
Python基于requests库爬取网站信息
Mar 02 Python
Python configparser模块配置文件过程解析
Mar 03 Python
在python image 中实现安装中文字体
May 16 Python
浅谈keras中的keras.utils.to_categorical用法
Jul 02 Python
增大python字体的方法步骤
Jul 05 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
Aug 07 Python
Python编写万花尺图案实例
Jan 03 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和ACCESS写聊天室(八)
2006/10/09 PHP
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
2007/04/18 PHP
PHP 读取大文件并显示的简单实例(推荐)
2016/08/12 PHP
yii2 resetful 授权验证详解
2017/05/18 PHP
2017年最好用的9个php开发工具推荐(超好用)
2017/10/23 PHP
ExtJS 2.0 GridPanel基本表格简明教程
2010/05/25 Javascript
编程语言JavaScript简介
2014/10/16 Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
2015/10/30 Javascript
js验证真实姓名与身份证号,手机号的简单实例
2016/07/18 Javascript
轻松实现js选项卡切换效果
2016/09/24 Javascript
javascript设计模式之单体模式学习笔记
2017/02/15 Javascript
Vue.js实现网格列表布局转换方法
2017/08/25 Javascript
jqgrid实现简单的单行编辑功能
2017/09/30 Javascript
Dropify.js图片宽高自适应的方法
2017/11/27 Javascript
微信小程序实现顶部下拉菜单栏
2018/11/04 Javascript
JavaScript如何实现元素全排列实例代码
2019/05/14 Javascript
layui 中select下拉change事件失效的解决方法
2019/09/20 Javascript
浅谈微信小程序列表埋点曝光指南
2019/10/15 Javascript
JS中的变量作用域(console版)
2020/07/18 Javascript
基于JavaScript实现简单抽奖功能代码实例
2020/10/20 Javascript
Python发送email的3种方法
2015/04/28 Python
Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
2015/08/16 Python
Python 判断是否为质数或素数的实例
2017/10/30 Python
python入门:这篇文章带你直接学会python
2018/09/14 Python
使用Python将图片转正方形的两种方法实例代码详解
2020/04/29 Python
美国东北部户外服装和设备零售商:Eastern Mountain Sports
2016/10/05 全球购物
美国领先的商务贺卡出版商:The Gallery Collection
2018/02/13 全球购物
工作个人的自我评价
2014/01/14 职场文书
商场端午节活动方案
2014/01/29 职场文书
119消防日活动总结
2014/08/29 职场文书
创先争优宣传标语
2014/10/08 职场文书
公司开业致辞
2015/07/29 职场文书
班主任经验交流心得体会
2015/11/02 职场文书
2019幼儿园感恩节活动策划书
2019/11/28 职场文书
PHP控制循环操作的时间
2021/04/01 PHP
使用Django框架创建项目
2022/06/10 Python