# -*- coding:utf-8 -*-
# 安装模块pip install paramiko ,如果提示ImportError: cannot import name '_bcrypt' ,则再安装pip install pycrypto模块
#ip.txt中 的格式是ip:port
#user.txt 每个用户名单独一行
#password.txt 每个密码单独一行
import paramiko, logging, threading, sys, os
from concurrent.futures import ThreadPoolExecutor, as_completed, wait, ALL_COMPLETED
logging.basicConfig(filename="run.log", filemode="w", format="%(asctime)s %(name)s:%(levelname)s:%(message)s",
datefmt="%d-%M-%Y %H:%M:%S", level=logging.DEBUG)
lock = threading.Lock()
def printpro(x):
if sys.platform == 'win32':
try:
print(x.decode('utf-8').encode('gbk'))
except:
print(x)
else:
print(x)
def sshCrack(ip, user, password, port):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
ssh.connect(ip, port, user, password)
except paramiko.ssh_exception.AuthenticationException:
result = "{0} {1} {2} 认证失败!".format(ip, user, password)
except Exception as e:
result = "{0} {1} {2} 发生错误:{3}!".format(ip, user, password, e)
else:
result = "{0} {1} {2} 连接成功!".format(ip, user, password)
global lock
lock.acquire()
with open('success.txt', 'a')as f:
f.write(result + '\n\r')
lock.release()
ssh.close()
printpro(result)
logging.info(result)
return result
class Items:
def __init__(self):
self.ips = []
self.users = []
self.passwords = []
self.ports = []
if __name__ == '__main__':
banner = """
_ _ _ _
( ) ( ) ( )_ (_ )
___ ___ | |__ ___ _ __ _ _ ___ | |/') | ,_) _ _ | |
/',__)/',__)| _ `\ /'___)( '__)/'_` ) /'___)| , < | | /'_`\ /'_`\ | |
\__, \\__, \| | | | ( (___ | | ( (_| |( (___ | |\`\ | |_ ( (_) )( (_) ) | |
(____/(____/(_) (_) `\____)(_) `\__,_)`\____)(_) (_) `\__)`\___/'`\___/'(___)
"""
printpro(banner)
if os.path.exists('ip.txt') and os.path.exists('user.txt') and os.path.exists('password.txt'):
pass
else:
printpro("检查目录是否已有 ip.txt 、user.txt 、password.txt ,如没有,请新建此三文件,再执行")
sys.exit(0)
if len(sys.argv) == 1:
printpro("{0} ssh crack running".format("->" * 10))
printpro("{0} 线程数默认为5,要调整,在运行方式后加上线程数".format("->" * 10))
printpro("{0} 例如:python3 sshcrack.py 8".format("->" * 10))
printpro("{0} 则以8线程进行爆破".format("->" * 10))
Tnum = 5
elif len(sys.argv) == 2:
Tnum = int(sys.argv[1])
else:
printpro("{0} 参数错误".format("->" * 10))
printpro("{0} 线程数默认为5,要调整,在运行方式后加上线程数".format("->" * 10))
printpro("{0} 例如:python3 sshcrack.py 8".format("->" * 10))
printpro("{0} 则以8线程进行爆破".format("->" * 10))
sys.exit(0)
item = Items()
with open('ip.txt', 'r')as fip, open('user.txt', 'r') as fuser, open('password.txt', 'r')as fpassword:
ips = fip.readlines()
users = fuser.readlines()
passwords = fpassword.readlines()
for ipp in ips:
if ":" in ipp:
ip = ipp.split(':')[0]
port = int(ipp.split(':')[1].strip())
else:
ip = ipp
port = 22
for user in users:
for password in passwords:
item.ips.append(ip.strip())
item.users.append(user.strip())
item.passwords.append(password.strip())
item.ports.append(port)
with ThreadPoolExecutor(max_workers=Tnum) as executor:
task = executor.map(sshCrack, item.ips, item.users, item.passwords, item.ports)
ssh弱口令检测脚本
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- John the Ripper 是一款常见的弱口令检测(或者说是破解)的小工具。 一、John the Rippe...
- 经过这么长时间的测试终于算是可以上线了,写篇文章跟大家分享一下自己的开发思路吧 注:本工具借鉴吸收了TideSec...
- 0x01 [7kbScan]-RDP-Sniper 使用说明 使用net4.0框架,为提高效率所以采用了线程池技术...