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 图片验证码代码
Dec 07 Python
python 合并文件的具体实例
Aug 08 Python
在GitHub Pages上使用Pelican搭建博客的教程
Apr 25 Python
在python3环境下的Django中使用MySQL数据库的实例
Aug 29 Python
python 实现在Excel末尾增加新行
May 02 Python
详解多线程Django程序耗尽数据库连接的问题
Oct 08 Python
如何利用Python模拟GitHub登录详解
Jul 15 Python
python实现批量修改服务器密码的方法
Aug 13 Python
Python定时任务随机时间执行的实现方法
Aug 14 Python
python队列原理及实现方法示例
Nov 27 Python
keras多显卡训练方式
Jun 10 Python
python对输出的奇数偶数排序实例代码
Dec 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
浅谈php正则表达式中的非贪婪模式匹配的使用
2014/11/25 PHP
详解PHP防止盗链防止迅雷下载的方法
2017/04/26 PHP
Javascript与vbscript数据共享
2007/01/09 Javascript
js判断FCKeditor内容是否为空的两种形式
2013/05/14 Javascript
jQuery数据缓存功能的实现思路及简单模拟
2013/05/27 Javascript
JS简单实现登陆验证附效果图
2013/11/19 Javascript
关于img的href和src取变量及赋值的方法
2014/04/28 Javascript
js中运算符&& 和 || 的使用记录
2014/08/21 Javascript
Javascript writable特性介绍
2015/02/27 Javascript
很全面的JavaScript常用功能汇总集合
2016/01/22 Javascript
js将json格式的对象拼接成复杂的url参数方法
2016/05/25 Javascript
JQuery之proxy实现绑定代理方法
2016/08/01 Javascript
巧用jQuery选择器提高写表单效率的方法
2016/08/19 Javascript
Vue开发中整合axios的文件整理
2017/04/29 Javascript
JS排序算法之冒泡排序,选择排序与插入排序实例分析
2017/12/13 Javascript
JS实现的简单折叠展开动画效果示例
2018/04/28 Javascript
深入理解Vue父子组件生命周期执行顺序及钩子函数
2018/08/12 Javascript
DWR内存兼容及无法调用问题解决方案
2020/10/16 Javascript
在vue中动态修改css其中一个属性值操作
2020/12/07 Vue.js
微信小程序向Java后台传输参数的方法实现
2020/12/10 Javascript
js定时器出现第一次延迟的原因及解决方法
2021/01/04 Javascript
django基础之数据库操作方法(详解)
2017/05/24 Python
Python判断文件和字符串编码类型的实例
2017/12/21 Python
对Python 3.5拼接列表的新语法详解
2018/11/08 Python
numpy和pandas中数组的合并、拉直和重塑实例
2019/06/28 Python
Python实现K折交叉验证法的方法步骤
2019/07/11 Python
丹尼尔惠灵顿手表天猫官方旗舰店:Daniel Wellington
2017/08/25 全球购物
Watchshop德国:欧洲在线手表No.1
2019/06/20 全球购物
销售经理竞聘书
2014/03/31 职场文书
小学运动会口号
2014/06/07 职场文书
运动会稿件100字
2014/09/24 职场文书
乡镇党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
2015年教师节慰问信
2015/03/23 职场文书
宪法宣传标语100条
2019/10/15 职场文书
Go中的条件语句Switch示例详解
2021/08/23 Golang
Android超详细讲解组件ScrollView的使用
2022/03/31 Java/Android