FTP login Checker

Python script that checks if an FTP login account is valid:

2024-10-31 17:02:38 - Coderja

import ftplib

def check_ftp_login(host, username, password):
    try:
        # Attempt to establish an FTP connection
        ftp = ftplib.FTP(host)
        
        # Try to login with the provided credentials
        ftp.login(username, password)
        
        # If login is successful, close the connection and return True
        ftp.quit()
        return True
    
    except ftplib.error_perm as e:
        # If there's a permission error (e.g., invalid credentials), return False
        print(f"Login failed: {str(e)}")
        return False
    
    except Exception as e:
        # If there's any other error, print it and return False
        print(f"An error occurred: {str(e)}")
        return False

# Example usage
if __name__ == "__main__":
    ftp_host = "ftp.example.com"
    ftp_username = "your_username"
    ftp_password = "your_password"
    
    if check_ftp_login(ftp_host, ftp_username, ftp_password):
        print("Login successful!")
    else:
        print("Login failed.")

Load From File

modified the script to load accounts from a file, save valid accounts to another file, and add a timeout for server connections. Here's the updated version
import ftplib
import socket

def check_ftp_login(host, username, password, timeout=10):
    try:
        # Attempt to establish an FTP connection with timeout
        ftp = ftplib.FTP()
        ftp.connect(host, timeout=timeout)
        
        # Try to login with the provided credentials
        ftp.login(username, password)
        
        # If login is successful, close the connection and return True
        ftp.quit()
        return True
    
    except ftplib.error_perm as e:
        # If there's a permission error (e.g., invalid credentials), return False
        print(f"Login failed for {username}@{host}: {str(e)}")
        return False
    
    except (socket.timeout, socket.error) as e:
        # If there's a timeout or connection error, print it and return False
        print(f"Connection error for {host}: {str(e)}")
        return False
    
    except Exception as e:
        # If there's any other error, print it and return False
        print(f"An error occurred for {username}@{host}: {str(e)}")
        return False

def load_accounts(filename):
    accounts = []
    with open(filename, 'r') as f:
        for line in f:
            host, username, password = line.strip().split(',')
            accounts.append((host, username, password))
    return accounts

def save_valid_account(filename, host, username, password):
    with open(filename, 'a') as f:
        f.write(f"{host},{username},{password}\n")

# Main script
if __name__ == "__main__":
    accounts = load_accounts('accounts.txt')
    
    for host, username, password in accounts:
        if check_ftp_login(host, username, password):
            print(f"Login successful for {username}@{host}")
            save_valid_account('valid.txt', host, username, password)
        else:
            print(f"Login failed for {username}@{host}")

More Posts