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 07 Python
Python实现变量数值交换及判断数组是否含有某个元素的方法
Sep 18 Python
Python实现mysql数据库更新表数据接口的功能
Nov 19 Python
Python中装饰器高级用法详解
Dec 25 Python
详解如何利用Cython为Python代码加速
Jan 27 Python
python3学习笔记之多进程分布式小例子
Feb 13 Python
python使用matplotlib绘制热图
Nov 07 Python
pandas 数据结构之Series的使用方法
Jun 21 Python
Python cookie的保存与读取、SSL讲解
Feb 17 Python
python redis存入字典序列化存储教程
Jul 16 Python
Django debug为True时,css加载失败的解决方案
Apr 24 Python
pytorch Dropout过拟合的操作
May 27 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 if 想到的些问题
2008/03/22 PHP
采集邮箱的php代码(抓取网页中的邮箱地址)
2012/07/17 PHP
关于PHP的curl开启问题探讨
2014/04/08 PHP
PHP学习记录之常用的魔术常量详解
2019/12/12 PHP
基于jquery可配置循环左右滚动例子
2011/09/09 Javascript
Javascript 颜色渐变效果的实现代码
2013/10/01 Javascript
JavaScript实现的日期控件具体代码
2013/11/18 Javascript
jQuery中trigger()方法用法实例
2015/01/19 Javascript
JavaScript模拟实现继承的方法
2015/03/30 Javascript
AngularJS页面访问时出现页面闪烁问题的解决
2016/03/06 Javascript
Node.js插件安装图文教程
2016/05/06 Javascript
玩转JavaScript OOP - 类的实现详解
2016/06/08 Javascript
深入浅析JS Function()构造函数
2016/08/22 Javascript
Vue.js动态添加、删除选题的实例代码
2016/09/30 Javascript
bootstrap weebox 支持ajax的模态弹出框
2017/02/23 Javascript
fullPage.js和CSS3实现全屏滚动效果
2017/05/05 Javascript
微信小程序顶部可滚动导航效果
2017/10/31 Javascript
jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法
2017/12/24 jQuery
一步一步的了解webpack4的splitChunk插件(小结)
2018/09/17 Javascript
vue-cli3.0如何使用CDN区分开发、生产、预发布环境
2018/11/22 Javascript
在nodejs中创建child process的方法
2021/01/26 NodeJs
[01:02:47]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
在Python中操作字符串之replace()方法的使用
2015/05/19 Python
详谈Python中列表list,元祖tuple和numpy中的array区别
2018/04/18 Python
python获取命令行输入参数列表的实例代码
2018/06/23 Python
Python字典循环添加一键多值的用法实例
2019/01/20 Python
谈谈Python中的while循环语句
2019/03/10 Python
解决Python中pandas读取*.csv文件出现编码问题
2019/07/12 Python
python3 googletrans超时报错问题及翻译工具优化方案 附源码
2020/12/23 Python
在校硕士自我鉴定
2014/01/23 职场文书
忠诚与背叛观后感
2015/06/04 职场文书
基层工作经历证明
2015/06/19 职场文书
学生会宣传部竞选稿
2015/11/21 职场文书
2016年优秀团支部事迹材料
2016/02/26 职场文书
SqlServer: 如何更改表的文件组?(进而改变存储位置)
2021/04/05 SQL Server
Python采集壁纸并实现炫轮播
2022/04/30 Python