为什么使用poplib给POP服务器无效凭据后不能用正确的凭据重试?

1 投票
2 回答
1057 浏览
提问于 2025-04-16 23:03

我正在写一个脚本,用来登录Hotmail。它会让用户输入密码,如果输入正确,那就没问题了。

但是如果用户第一次输入密码错误,之后再输入正确的密码就会失效。

这是我让用户输入密码的代码:

import poplib

M = poplib.POP3_SSL('pop3.live.com', 995) #Connect to hotmail pop3 server
M.set_debuglevel(2)
success = False;
user = "email@hotmail.com"

while success == False:
    try:
        password = raw_input("password: ")
        M.user(user)
        M.pass_(password)
    except:
        print "Invalid credentials"
    else:
        print "Successful login"
        success = True

这是我在调试级别2下的输出:

$ python my_program.py
password: password
*cmd* 'USER email@hotmail.com'
*put* 'USER email@hotmail.com'
*get* '+OK password required\r\n'
*resp* '+OK password required'
*cmd* "PASS password"
*put* "PASS password"
*get* '+OK mailbox has 1 messages\r\n'
*resp* '+OK mailbox has 1 messages'
Successful login

$ python my_program.py
password: 1234
*cmd* 'USER email@hotmail.com'
*put* 'USER email@hotmail.com'
*get* '+OK password required\r\n'
*resp* '+OK password required'
*cmd* 'PASS 1234'
*put* 'PASS 1234'
*get* '-ERR authentication failed\r\n'
*resp* '-ERR authentication failed'
Invalid credentials
password: password
*cmd* 'USER email@hotmail.com'
*put* 'USER email@hotmail.com'
*get* '+OK password required\r\n'
*resp* '+OK password required'
*cmd* "PASS password"
*put* "PASS password"
Invalid credentials

我这里缺少了什么呢?我想说明一下,我对Python还很陌生。

2 个回答

0

我在管理一个互联网服务提供商的邮件服务器时,发现暴力破解攻击是个大麻烦。想象一下,对于Hotmail来说,这个问题可能更严重!我觉得他们在失败后设置超时的做法只是个糟糕的应急措施。

1

好的,我想你用poplib这个对象登录的时候只能尝试一次。解决办法是把“M”的声明放到while循环里面(我发誓我在发帖之前也试过这个,但我可能搞错了什么)。

撰写回答