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类的多重继承问题深入分析
Nov 09 Python
Python中对列表排序实例
Jan 04 Python
python僵尸进程产生的原因
Jul 21 Python
django 开发忘记密码通过邮箱找回功能示例
Apr 17 Python
对Python Pexpect 模块的使用说明详解
Feb 14 Python
pyqt5中QThread在使用时出现重复emit的实例
Jun 21 Python
python程序快速缩进多行代码方法总结
Jun 23 Python
Python多进程编程multiprocessing代码实例
Mar 12 Python
Django实现从数据库中获取到的数据转换为dict
Mar 27 Python
python torch.utils.data.DataLoader使用方法
Apr 02 Python
Keras中 ImageDataGenerator函数的参数用法
Jul 03 Python
pycharm不以pytest方式运行,想要切换回普通模式运行的操作
Sep 01 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之第七天
2006/10/09 PHP
Linux下 php5 MySQL5 Apache2 phpMyAdmin ZendOptimizer安装与配置[图文]
2008/11/18 PHP
CodeIgniter安全相关设置汇总
2014/07/03 PHP
php版微信公众平台之微信网页登陆授权示例
2016/09/23 PHP
laravel框架如何设置公共头和公共尾
2019/10/22 PHP
JS遮罩层效果 兼容ie firefox jQuery遮罩层
2010/07/26 Javascript
JS取文本框中最小值的简单实例
2013/11/29 Javascript
jquery append()方法与html()方法的区别及使用介绍
2014/08/01 Javascript
JavaScript简单表格编辑功能实现方法
2015/04/16 Javascript
jQuery实现延迟跳转的方法
2015/06/05 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
2016/01/22 Javascript
AngularJS中如何使用$http对MongoLab数据表进行增删改查
2016/01/23 Javascript
webpack常用配置项配置文件介绍
2016/11/07 Javascript
js实现文件上传功能 后台使用MultipartFile
2018/09/08 Javascript
微信小程序自定义导航栏
2018/12/31 Javascript
jquery 回调操作实例分析【回调成功与回调失败的情况】
2019/09/27 jQuery
JavaScript 装逼指南(js另类写法)
2020/05/10 Javascript
详解如何使用React Hooks请求数据并渲染
2020/10/18 Javascript
[05:02][DOTA2]DOTA进化论 第一期
2013/09/27 DOTA
[05:42]DOTA2英雄梦之声_第10期_蝙蝠骑士
2014/06/21 DOTA
[04:10]2018年度CS GO玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
python爬虫实现教程转换成 PDF 电子书
2017/02/19 Python
python3实现小球转动抽奖小游戏
2020/04/15 Python
利用Python进行图像的加法,图像混合(附代码)
2019/07/14 Python
Python中bisect的使用方法
2019/12/31 Python
什么是Python包的循环导入
2020/09/08 Python
python wsgiref源码解析
2021/02/06 Python
小天鹅官方商城:LittleSwan
2017/06/16 全球购物
希腊品牌鞋类销售网站:epapoutsia.gr
2020/03/18 全球购物
电钳专业个人求职信
2014/01/04 职场文书
联谊会主持词
2014/03/26 职场文书
英语课前三分钟演讲稿(6篇)
2014/09/13 职场文书
反对四风问题自我剖析材料
2014/09/29 职场文书
2015年班干部工作总结
2015/04/29 职场文书
机械生产实习心得体会
2016/01/22 职场文书
python利用while求100内的整数和方式
2021/11/07 Python