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 21 Python
Python利用ElementTree模块处理XML的方法详解
Aug 31 Python
PyCharm代码提示忽略大小写设置方法
Oct 28 Python
详解python做UI界面的方法
Feb 27 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
Jun 13 Python
python使用celery实现异步任务执行的例子
Aug 28 Python
基于Python 中函数的 收集参数 机制
Dec 21 Python
Python requests获取网页常用方法解析
Feb 20 Python
Python判断字符串是否为空和null方法实例
Apr 26 Python
PyTorch: Softmax多分类实战操作
Jul 07 Python
2020版Python学习路线图(附学习资料)
Sep 15 Python
Python常用断言函数实例汇总
Nov 30 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
延长phpmyadmin登录时间的方法
2011/02/06 PHP
PHP重定向的3种方式
2013/03/07 PHP
mysql查找删除重复数据并只保留一条实例详解
2016/09/24 PHP
一个简单的JavaScript 日期计算算法
2009/09/11 Javascript
jquery修改属性值实例代码(设置属性值)
2014/01/06 Javascript
jQuery仿gmail实现fixed布局的方法
2015/05/27 Javascript
详解JavaScript正则表达式中的global属性的使用
2015/06/16 Javascript
jQuery实现可展开合拢的手风琴面板菜单
2015/09/15 Javascript
详解Angular 4.x 动态创建组件
2017/04/25 Javascript
详解如何让InstantClick兼容MathJax、百度统计等
2017/09/12 Javascript
简单的Vue SSR的示例代码
2018/01/12 Javascript
解决vue build打包之后首页白屏的问题
2018/03/06 Javascript
详解jQuery中的easyui
2018/09/02 jQuery
vue interceptor 使用教程实例详解
2018/09/13 Javascript
jQuery Ajax实现Select多级关联动态绑定数据的实例代码
2018/10/26 jQuery
在pycharm中开发vue的方法步骤
2020/03/04 Javascript
Nodejs文件上传、监听上传进度的代码
2020/03/27 NodeJs
JQuery Ajax如何实现注册检测用户名
2020/09/25 jQuery
[42:23]完美世界DOTA2联赛PWL S3 Forest vs Rebirth 第二场 12.10
2020/12/13 DOTA
[59:53]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第二场 3月6日
2021/03/11 DOTA
python中is与双等于号“==”的区别示例详解
2017/11/21 Python
名片管理系统python版
2018/01/11 Python
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
2018/03/15 Python
数据清洗--DataFrame中的空值处理方法
2018/07/03 Python
python-opencv获取二值图像轮廓及中心点坐标的代码
2019/08/27 Python
python多环境切换及pyenv使用过程详解
2019/09/27 Python
python之列表推导式的用法
2019/11/29 Python
Python os库常用操作代码汇总
2020/11/03 Python
Kathmandu英国网站:新西兰户外运动品牌
2017/03/27 全球购物
Desigual美国官方网站:西班牙服装品牌
2019/03/29 全球购物
介绍下static、final、abstract区别
2015/01/30 面试题
2015年元旦文艺汇演主持词
2014/03/26 职场文书
委托书怎么写
2014/07/31 职场文书
2015年学校医务室工作总结
2015/07/20 职场文书
人事任命书范本
2015/09/21 职场文书
2016年党员读书月活动总结
2016/04/06 职场文书