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 socket C/S结构的聊天室应用实现
Nov 30 Python
在Python中使用全局日志时需要注意的问题
May 06 Python
浅谈python中的占位符
Nov 09 Python
浅析python打包工具distutils、setuptools
Apr 20 Python
详解Python安装scrapy的正确姿势
Jun 26 Python
用Python将一个列表分割成小列表的实例讲解
Jul 02 Python
Django CBV类的用法详解
Jul 26 Python
Ranorex通过Python将报告发送到邮箱的方法
Jan 12 Python
Python要如何实现列表排序的几种方法
Feb 21 Python
完美解决jupyter由于无法import新包的问题
May 26 Python
python实现数字炸弹游戏
Jul 17 Python
python自动打开浏览器下载zip并提取内容写入excel
Jan 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中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
2011/07/03 PHP
PHP开发者常犯的10个MySQL错误更正剖析
2012/01/30 PHP
tp5(thinkPHP5框架)captcha验证码配置及验证操作示例
2019/05/28 PHP
使用新的消息弹出框blackbirdjs
2008/10/16 Javascript
jquery 简单导航实现代码
2009/09/11 Javascript
JQuery从头学起第一讲
2010/07/04 Javascript
jquery load事件(callback/data)使用方法及注意事项
2013/02/06 Javascript
js中文逗号转英文实现
2014/02/11 Javascript
jquery 实现两级导航菜单附效果图
2014/03/07 Javascript
JavaScript实现存储HTML字符串示例
2014/04/21 Javascript
JavaScript输出当前时间Unix时间戳的方法
2015/04/06 Javascript
javascript自定义右键弹出菜单实现方法
2015/05/25 Javascript
JS拖动鼠标画出方框实现鼠标选区的方法
2015/08/05 Javascript
使用堆实现Top K算法(JS实现)
2015/12/25 Javascript
Angularjs 设置全局变量的方法总结
2016/10/20 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
一种angular的方法级的缓存注解(装饰器)
2018/03/13 Javascript
js定义类的方法示例【ES5与ES6】
2019/07/30 Javascript
Angular+Ionic使用queryParams实现跳转页传值的方法
2020/09/05 Javascript
react ant Design手动设置表单的值操作
2020/10/31 Javascript
在Django的视图(View)外使用Session的方法
2015/07/23 Python
python实现校园网自动登录的示例讲解
2018/04/22 Python
pandas.dataframe中根据条件获取元素所在的位置方法(索引)
2018/06/07 Python
CentOS下Python3的安装及创建虚拟环境的方法
2018/11/28 Python
优质美利奴羊毛袜,不只是徒步旅行:Darn Tough Vermont
2018/11/05 全球购物
会计毕业生求职简历的自我评价
2013/10/20 职场文书
装潢设计专业推荐信模板
2013/11/26 职场文书
化工专业个人的求职信范文
2013/11/28 职场文书
汽车制造与装配专业自荐信范文
2014/01/02 职场文书
不忘国耻振兴中华演讲稿
2014/05/14 职场文书
2014党员学习兰辉先进事迹思想汇报
2014/09/17 职场文书
人口与计划生育责任书
2015/05/09 职场文书
圣诞晚会主持词开场白
2015/05/28 职场文书
2016教师校本培训心得体会
2016/01/08 职场文书
MySQL的Query Cache图文详解
2021/07/01 MySQL
js不常见操作运算符总结
2021/11/20 Javascript