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 21 Python
python基础教程之面向对象的一些概念
Aug 29 Python
使用Python对IP进行转换的一些操作技巧小结
Nov 09 Python
python版本的读写锁操作方法
Apr 25 Python
python组合无重复三位数的实例
Nov 13 Python
pygame游戏之旅 添加游戏暂停功能
Nov 21 Python
用python建立两个Y轴的XY曲线图方法
Jul 08 Python
Django 重写用户模型的实现
Jul 29 Python
用python3 urllib破解有道翻译反爬虫机制详解
Aug 14 Python
在Python中使用MongoEngine操作数据库教程实例
Dec 03 Python
keras训练浅层卷积网络并保存和加载模型实例
Jul 02 Python
python中Matplotlib绘制直线的实例代码
Jul 04 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
星际玩家的三大定律
2020/03/04 星际争霸
PHP邮件专题
2006/10/09 PHP
我的论坛源代码(四)
2006/10/09 PHP
相对路径转化成绝对路径
2007/04/10 PHP
php 结果集的分页实现代码
2009/03/10 PHP
zend Framework中的Layout(模块化得布局)详解
2013/06/28 PHP
JQuery 学习笔记 选择器之二
2009/07/23 Javascript
很棒的学习jQuery的12个网站推荐
2011/04/28 Javascript
面向对象Javascript核心支持代码分享
2012/05/23 Javascript
javascript从右边截取指定字符串的三种实现方法
2013/11/29 Javascript
使用js Math.random()函数生成n到m间的随机数字
2014/10/09 Javascript
JavaScript检测浏览器cookie是否已经启动的方法
2015/02/27 Javascript
JS实现鼠标箭头变成一个燃烧烛光效果的方法
2015/02/28 Javascript
jQuery满屏焦点图左右滚动特效代码分享
2015/09/07 Javascript
jfinal与bootstrap的登录跳转实战演习
2015/09/22 Javascript
ajax的分页查询示例(不刷新页面)
2017/01/11 Javascript
BOM之navigator对象和用户代理检测
2017/02/10 Javascript
mac下的nodejs环境安装的步骤
2017/05/24 NodeJs
jQuery Json数据格式排版高亮插件json-viewer.js使用方法详解
2017/06/12 jQuery
详解webpack模块加载器兼打包工具
2018/09/11 Javascript
Vue的状态管理vuex使用方法详解
2020/02/05 Javascript
javascript中contains是否包含功能实现代码(扩展字符、数组、dom)
2020/04/07 Javascript
[04:44]DOTA2西游记战队视频彩蛋流出 师徒开黑巧遇林书豪
2016/08/03 DOTA
Python网络编程之TCP套接字简单用法示例
2018/04/09 Python
解决Python requests库编码 socks5代理的问题
2018/05/07 Python
Pytorch实现GoogLeNet的方法
2019/08/18 Python
Python 基于wxpy库实现微信添加好友功能(简洁)
2019/11/29 Python
python调用摄像头的示例代码
2020/09/28 Python
viagogo法国票务平台:演唱会、体育比赛、戏剧门票
2017/03/27 全球购物
化工工艺专业求职信
2013/09/22 职场文书
2014年秋季开学典礼主持词
2014/08/02 职场文书
私人委托书格式
2014/09/10 职场文书
财务工作失误检讨书
2015/02/19 职场文书
python基础之文件操作
2021/10/24 Python
PostgreSQL13基于流复制搭建后备服务器的方法
2022/01/18 PostgreSQL
Python基本知识点总结
2022/04/07 Python