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批量按比例缩小图片脚本分享
May 21 Python
Python求两个文本文件以行为单位的交集、并集与差集的方法
Jun 17 Python
Python 2与Python 3版本和编码的对比
Feb 14 Python
修改 CentOS 6.x 上默认Python的方法
Sep 06 Python
通过celery异步处理一个查询任务的完整代码
Nov 19 Python
python中的itertools的使用详解
Jan 13 Python
python生成13位或16位时间戳以及反向解析时间戳的实例
Mar 03 Python
python画图常规设置方式
Mar 05 Python
通过自学python能找到工作吗
Jun 21 Python
Python selenium爬取微信公众号文章代码详解
Aug 12 Python
PyQt5 QThread倒计时功能的实现代码
Apr 02 Python
浅谈Python numpy创建空数组的问题
May 25 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
重量级动漫纷纷停播!唯独OVERLORD第四季正在英魂之刃继续更新
2020/05/06 日漫
使用PHP提取视频网站页面中的FLASH地址的代码
2010/04/17 PHP
[原创]php获取数组中键值最大数组项的索引值
2015/03/17 PHP
PHP基于curl模拟post提交json数据示例
2018/06/22 PHP
JS 强制设为首页的代码
2009/01/31 Javascript
上传的js验证(图片/文件的扩展名)
2013/04/25 Javascript
jquery遍历之parent()和parents()的区别及parentsUntil()方法详解
2013/12/02 Javascript
js加密解密字符串可自定义密码因子
2014/05/13 Javascript
深入浅析JavaScript中的Function类型
2016/07/09 Javascript
Vue.js结合Ueditor富文本编辑器的实例代码
2017/07/11 Javascript
微信小程序删除处理详解
2017/08/16 Javascript
node.js多个异步过程中判断执行是否完成的解决方案
2017/12/10 Javascript
vuex进阶知识点巩固
2018/05/20 Javascript
JS实现根据指定值删除数组中的元素操作示例
2018/08/02 Javascript
微信小程序顶部导航栏滑动tab效果
2019/01/28 Javascript
微信小程序中转义字符的处理方法
2019/03/28 Javascript
vue+django实现一对一聊天功能的实例代码
2019/07/17 Javascript
Vue router安装及使用方法解析
2020/12/02 Vue.js
Vue实现图书管理小案例
2020/12/03 Vue.js
[40:19]2018完美盛典CS.GO表演赛
2018/12/17 DOTA
python回调函数中使用多线程的方法
2017/12/25 Python
python3.4实现邮件发送功能
2018/05/28 Python
Python实现ping指定IP的示例
2018/06/04 Python
浅谈pytorch grad_fn以及权重梯度不更新的问题
2019/08/20 Python
pycharm + django跨域无提示的解决方法
2020/12/06 Python
python多线程爬取西刺代理的示例代码
2021/01/30 Python
林清轩官方网站:山茶花润肤油开创者
2016/10/26 全球购物
Ajax主要包含了哪些技术
2014/06/12 面试题
迟到检讨书大全
2014/01/25 职场文书
会议主持词
2014/03/17 职场文书
幼儿园健康教育方案
2014/06/14 职场文书
教师节主持词开场白
2015/05/29 职场文书
2015年科学教研组工作总结
2015/07/22 职场文书
感恩教师主题班会
2015/08/12 职场文书
写自招自荐信的绝招!
2019/04/19 职场文书
Nginx下配置Https证书详细过程
2021/04/01 Servers