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正则表达式匹配HTML页面编码
Apr 08 Python
使用python检测主机存活端口及检查存活主机
Oct 12 Python
python3实现ftp服务功能(服务端 For Linux)
Mar 24 Python
Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
Dec 12 Python
Python 3.x 判断 dict 是否包含某键值的实例讲解
Jul 06 Python
在python中安装basemap的教程
Sep 20 Python
PyQt5 在label显示的图片中绘制矩形的方法
Jun 17 Python
Python实现某论坛自动签到功能
Aug 20 Python
python getpass模块用法及实例详解
Oct 07 Python
浅谈pandas.cut与pandas.qcut的使用方法及区别
Mar 03 Python
Python通过fnmatch模块实现文件名匹配
Sep 30 Python
python unichr函数知识点总结
Dec 16 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 读取shell管道传输过来的内容
2010/03/01 PHP
php限制上传文件类型并保存上传文件的方法
2015/03/13 PHP
php在数组中查找指定值的方法
2015/03/17 PHP
为jQuery.Treeview添加右键菜单的实现代码
2010/10/22 Javascript
js,jQuery 排序的实现代码,网页标签排序的实现,标签排序
2011/04/27 Javascript
JQuery中判断一个元素下面是否有内容或者有某个标签的判断代码
2012/02/02 Javascript
jQuery 获取浏览器所在的IP地址的小例子
2013/11/08 Javascript
js确认删除对话框效果的示例代码
2014/02/20 Javascript
鼠标事件的screenY,pageY,clientY,layerY,offsetY属性详解
2015/03/12 Javascript
使用jquery实现鼠标滑过弹出更多相关信息层附源码下载
2015/11/23 Javascript
JS平滑无缝滚动效果的实现代码
2016/05/06 Javascript
js获取所有checkbox的值的简单实例
2016/05/30 Javascript
jQuery中Find选择器用法示例
2016/09/21 Javascript
Node.js包管理器Yarn的入门介绍与安装
2016/10/17 Javascript
AngularJS过滤器filter用法实例分析
2016/11/04 Javascript
详解angular2实现ng2-router 路由和嵌套路由
2017/03/24 Javascript
cordova入门基础教程及使用中遇到的一些问题总结
2017/11/14 Javascript
详解koa2学习中使用 async 、await、promise解决异步的问题
2018/11/13 Javascript
JavaScript接口实现方法实例分析
2020/05/16 Javascript
通过js随机函数Math.random实现乱序
2020/05/19 Javascript
python基础之包的导入和__init__.py的介绍
2018/01/08 Python
TensorFlow搭建神经网络最佳实践
2018/03/09 Python
Tensorflow中的placeholder和feed_dict的使用
2018/07/09 Python
Python3中内置类型bytes和str用法及byte和string之间各种编码转换 问题
2018/09/27 Python
Python小进度条显示代码
2019/03/05 Python
python抓取搜狗微信公众号文章
2019/04/01 Python
Python Tornado之跨域请求与Options请求方式
2020/03/28 Python
Python制作一个仿QQ办公版的图形登录界面
2020/09/22 Python
css3实现背景模糊的三种方式(小结)
2020/05/15 HTML / CSS
YSL圣罗兰美妆官方旗舰店:购买YSL口红
2018/04/16 全球购物
一道Delphi上机题
2012/06/04 面试题
诉前财产保全担保书
2014/05/20 职场文书
幼儿园五一劳动节活动总结
2015/02/09 职场文书
北京爱情故事观后感
2015/06/12 职场文书
SQL SERVER存储过程用法详解
2022/02/24 SQL Server
图神经网络GNN算法
2022/05/11 Python