wellnpm 2.0.9 → 2.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,105 @@
1
+ # Skrip Senarai Model, Varian, dan Anggaran Kos Servis Aircond (Proton & Perodua)
2
+
3
+ # 1. Database Harga Mengikut Kategori Sistem Aircond
4
+ # Harga adalah anggaran standard pasaran (Buka Pasang, Flashing, Gas, O-Ring)
5
+ kategori_harga = {
6
+ "Kecil / Kompak (Sistem Tunggal)": {
7
+ "buka_pasang": 60, "flashing": 120, "isi_gas": 65, "tukar_oring": 30, "jumlah": 275,
8
+ "nota": "Sistem kecil, akses enjin mudah (Contoh: Kancil, Kelisa, Viva, Axia)."
9
+ },
10
+ "Sedan / Hatchback Sederhana": {
11
+ "buka_pasang": 80, "flashing": 140, "isi_gas": 75, "tukar_oring": 35, "jumlah": 330,
12
+ "nota": "Sistem standard, ruang enjin sederhana padat (Contoh: Saga, Myvi, Wira, Persona, Bezza, Iriz)."
13
+ },
14
+ "Sedan Besar / Premium": {
15
+ "buka_pasang": 100, "flashing": 160, "isi_gas": 85, "tukar_oring": 40, "jumlah": 385,
16
+ "nota": "Kompresor lebih besar, hos lebih panjang (Contoh: Waja, Perdana, Preve, Inspira, S70)."
17
+ },
18
+ "SUV & MPV (Sistem Tunggal / Kompak)": {
19
+ "buka_pasang": 100, "flashing": 160, "isi_gas": 90, "tukar_oring": 40, "jumlah": 390,
20
+ "nota": "Ruang enjin agak padat, memerlukan tekanan gas optimum (Contoh: Kembara, Ativa, X50, Aruz)."
21
+ },
22
+ "MPV / SUV Besar (Double Blower)": {
23
+ "buka_pasang": 140, "flashing": 200, "isi_gas": 130, "tukar_oring": 60, "jumlah": 530,
24
+ "nota": "Ada kipas/evaporator belakang. Guna lebih banyak gas & O-Ring (Contoh: Alza, Exora, X70, X90, Rusa)."
25
+ }
26
+ }
27
+
28
+ # 2. Struktur Data Kereta Berserta Kategori Aircond Masing-masing
29
+ data_kereta = {
30
+ "Proton": {
31
+ "Saga": {"kategori": "Sedan / Hatchback Sederhana", "varian": ["Saga Orion", "Saga Iswara", "Saga BLM/FLX", "Saga VVT"]},
32
+ "Wira": {"kategori": "Sedan / Hatchback Sederhana", "varian": ["Wira Sedan", "Wira Aeroback"]},
33
+ "Satria": {"kategori": "Sedan / Hatchback Sederhana", "varian": ["Satria GTi", "Satria Neo"]},
34
+ "Persona": {"kategori": "Sedan / Hatchback Sederhana", "varian": ["Persona Old (2007)", "Persona VVT"]},
35
+ "Iriz": {"kategori": "Sedan / Hatchback Sederhana", "varian": ["Iriz 1.3", "Iriz 1.6", "Iriz Active"]},
36
+ "Waja": {"kategori": "Sedan Besar / Premium", "varian": ["Waja 1.6 (Campro/MMC)", "Waja 1.8 (Renault)"]},
37
+ "Perdana": {"kategori": "Sedan Besar / Premium", "varian": ["Perdana V6", "Perdana 'Accordana'"]},
38
+ "Preve / Suprima": {"kategori": "Sedan Besar / Premium", "varian": ["Preve Turbo CFE", "Suprima S"]},
39
+ "S70": {"kategori": "Sedan Besar / Premium", "varian": ["S70 Executive/Premium", "S70 Flagship"]},
40
+ "X50": {"kategori": "SUV & MPV (Sistem Tunggal / Kompak)", "varian": ["X50 Standard/Executive", "X50 Flagship"]},
41
+ "Exora": {"kategori": "MPV / SUV Besar (Double Blower)", "varian": ["Exora CPS", "Exora Bold Turbo"]},
42
+ "X70": {"kategori": "MPV / SUV Besar (Double Blower)", "varian": ["X70 Standard", "X70 Premium"]},
43
+ "X90": {"kategori": "MPV / SUV Besar (Double Blower)", "varian": ["X90 Mild-Hybrid"]}
44
+ },
45
+ "Perodua": {
46
+ "Kancil": {"kategori": "Kecil / Kompak (Sistem Tunggal)", "varian": ["Kancil 660", "Kancil 850"]},
47
+ "Kelisa": {"kategori": "Kecil / Kompak (Sistem Tunggal)", "varian": ["Kelisa 850", "Kelisa 1000"]},
48
+ "Viva": {"kategori": "Kecil / Kompak (Sistem Tunggal)", "varian": ["Viva 660", "Viva 1.0 Elite"]},
49
+ "Axia": {"kategori": "Kecil / Kompak (Sistem Tunggal)", "varian": ["Axia Lama (E/G/SE)", "Axia Baru (DNGA)"]},
50
+ "Myvi": {"kategori": "Sedan / Hatchback Sederhana", "varian": ["Myvi Gen 1", "Myvi Lagi Best", "Myvi Gen 3"]},
51
+ "Bezza": {"kategori": "Sedan / Hatchback Sederhana", "varian": ["Bezza 1.0 G", "Bezza 1.3 X/AV"]},
52
+ "Kembara": {"kategori": "SUV & MPV (Sistem Tunggal / Kompak)", "varian": ["Kembara 1.3", "Kembara DVVT"]},
53
+ "Ativa": {"kategori": "SUV & MPV (Sistem Tunggal / Kompak)", "varian": ["Ativa X/H/AV Turbo"]},
54
+ "Aruz": {"kategori": "SUV & MPV (Sistem Tunggal / Kompak)", "varian": ["Aruz 1.5 X", "Aruz 1.5 AV"]},
55
+ "Rusa": {"kategori": "MPV / SUV Besar (Double Blower)", "varian": ["Rusa 1.3", "Rusa 1.6"]},
56
+ "Alza": {"kategori": "MPV / SUV Besar (Double Blower)", "varian": ["Alza Lama (2009-2018)", "Alza Baru (DNGA 2022+)"]}
57
+ }
58
+ }
59
+
60
+ # 3. Fungsi Paparan Sistem
61
+ def paparkan_menu():
62
+ print("=" * 55)
63
+ print(" SISTEM KOS SERVIS AIRCOND PROTON & PERODUA ")
64
+ print("=" * 55)
65
+ print("1. PROTON")
66
+ print("2. PERODUA")
67
+ print("3. Keluar")
68
+ print("-" * 55)
69
+
70
+ def paparkan_model_dan_harga(jenama):
71
+ print(f"\n>>> SENARAI KOS SERVIS AIRCOND PENUH {jenama.upper()} <<<")
72
+ print("=" * 65)
73
+
74
+ for model, info in data_kereta[jenama].items():
75
+ kat = info["kategori"]
76
+ harga = kategori_harga[kat]
77
+
78
+ print(f"🚗 MODEL: {model.upper()}")
79
+ print(f" Varian Terlibat : {', '.join(info['varian'])}")
80
+ print(f" Kategori Sistem : {kat}")
81
+ print(f" -------------------------------------------------")
82
+ print(f" * Kos Buka Pasang (Upah) : RM {harga['buka_pasang']}")
83
+ print(f" * Kos Flashing System : RM {harga['flashing']}")
84
+ print(f" * Kos Isi Gas Baru (R134a): RM {harga['isi_gas']}")
85
+ print(f" * Kos Tukar O-Ring Set : RM {harga['tukar_oring']}")
86
+ print(f" [+] ANGGARAN JUMLAH BERSIH: RM {harga['jumlah']}")
87
+ print(f" 💡 Nota: {harga['nota']}")
88
+ print("=" * 65)
89
+
90
+ # 4. Main Logic Loop
91
+ while True:
92
+ paparkan_menu()
93
+ pilihan = input("Masukkan pilihan anda (1/2/3): ").strip()
94
+
95
+ if pilihan == "1":
96
+ paparkan_model_dan_harga("Proton")
97
+ elif pilihan == "2":
98
+ paparkan_model_dan_harga("Perodua")
99
+ elif pilihan == "3":
100
+ print("\nSkrip tamat. Semoga sistem aircond kereta anda kekal sejuk!")
101
+ break
102
+ else:
103
+ print("\nPilihan tidak sah! Masukkan nombor 1, 2, atau 3.\n")
104
+
105
+ input("\nTekan [ENTER] untuk kembali ke menu utama...")
@@ -0,0 +1,9 @@
1
+ # DuoGuard 🛡️
2
+
3
+ Sistem pertahanan siber mikro berasaskan Python untuk memantau aktiviti rangkaian peranti dan menganalisis kebenaran aplikasi Android (APK).
4
+
5
+ ## Cara Penggunaan
6
+ 1. Pasang keperluan: `pip install -r requirements.txt`
7
+ 2. Jalankan skrip: `python main.py`
8
+
9
+ *Nota: Untuk fungsi memantau rangkaian (Pilihan 1), anda mungkin perlu menjalankan terminal anda sebagai **Administrator** (Windows) atau **sudo** (Linux/Mac).*
@@ -0,0 +1,27 @@
1
+ import socket
2
+ import datetime
3
+
4
+ # Pasang/Set hos dan port umpan (Port 8080 digunakan kerana Termux perlukan akses root untuk Port 80)
5
+ HOST = '0.0.0.0'
6
+ PORT = 8080
7
+
8
+ # Bina soket untuk intai sambungan
9
+ server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
10
+ server.bind((HOST, PORT))
11
+ server.listen(5)
12
+
13
+ print(f"[*] Honeypot aktif! Mengintai di port {PORT}...")
14
+
15
+ while True:
16
+ client_conn, client_addr = server.accept()
17
+ masa = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
18
+
19
+ # Intai data yang dihantar oleh "penggodam"
20
+ request = client_conn.recv(1024).decode('utf-8', errors='ignore')
21
+
22
+ print(f"\n[!] AMARAN SERANGAN! Dikesan pada {masa}")
23
+ print(f"[+] IP Penggodam: {client_addr[0]}")
24
+ print(f"[+] Data diintai:\n{request}")
25
+
26
+ # Gagalkan/Putuskan sambungan serta-merta
27
+ client_conn.close()
@@ -0,0 +1,53 @@
1
+ import requests
2
+ import base64
3
+
4
+ # 1. Masukkan API Key VirusTotal anda di sini
5
+ API_KEY = "4db1d96b26a22f24b93886f7446b159c8353782e13bf255905d3bada30a94cde"
6
+
7
+ def semak_url(url_target):
8
+ # VirusTotal memerlukan URL ditukar ke format base64 URL-safe tanpa simbol '='
9
+ url_id = base64.urlsafe_b64encode(url_target.encode()).decode().strip("=")
10
+
11
+ endpoint = f"https://www.virustotal.com/api/v3/urls/{url_id}"
12
+ headers = {
13
+ "accept": "application/json",
14
+ "x-apikey": API_KEY
15
+ }
16
+
17
+ print(f"Sedang menyemak: {url_target}...\n")
18
+
19
+ try:
20
+ response = requests.get(endpoint, headers=headers)
21
+
22
+ if response.status_code == 200:
23
+ data = response.json()
24
+ # Mengambil statistik hasil imbasan
25
+ stats = data['data']['attributes']['last_analysis_stats']
26
+
27
+ print("=== HASIL IMBASAN KESELAMATAN ===")
28
+ print(f"Berbahaya (Malicious): {stats['malicious']}")
29
+ print(f"Pancingan Data (Phishing): {stats['phishing']}")
30
+ print(f"Selamat (Harmless): {stats['harmless']}")
31
+ print(f"Tidak Ditandakan (Undetected): {stats['undetected']}")
32
+ print("=================================")
33
+
34
+ # Keputusan ringkas
35
+ if stats['malicious'] > 0 or stats['phishing'] > 0:
36
+ print("\n⚠️ AMARAN: Pautan ini dikesan berbahaya oleh penapis keselamatan!")
37
+ else:
38
+ print("\n✅ Setakat ini, tiada ancaman dikesan pada pautan ini.")
39
+
40
+ elif response.status_code == 404:
41
+ print("Pautan ini belum pernah diimbas dalam pangkalan data VirusTotal.")
42
+ print("Anda boleh menghantarnya untuk imbasan baharu melalui portal mereka.")
43
+ else:
44
+ print(f"Gagal membuat semakan. Kod ralat: {response.status_code}")
45
+
46
+ except Exception as e:
47
+ print(f"Berlaku ralat sistem: {e}")
48
+
49
+ # --- Cara Penggunaan ---
50
+ if __name__ == "__main__":
51
+ # Gantikan dengan pautan yang anda mahu periksa secara selamat
52
+ pautan_dicurigai = "http://contoh-laman-web-pancingan.com"
53
+ semak_url(pautan_dicurigai)
@@ -0,0 +1,89 @@
1
+ import requests
2
+ import base64
3
+ import time
4
+
5
+ # Masukkan API Key VirusTotal anda di sini
6
+ API_KEY = "4db1d96b26a22f24b93886f7446b159c8353782e13bf255905d3bada30a94cde"
7
+
8
+ def semak_reputasi_url(url_target):
9
+ """Memeriksa satu URL menggunakan API VirusTotal"""
10
+ # Tukar URL ke format base64 URL-safe (keperluan API VirusTotal)
11
+ url_id = base64.urlsafe_b64encode(url_target.encode()).decode().strip("=")
12
+ endpoint = f"https://www.virustotal.com/api/v3/urls/{url_id}"
13
+ headers = {
14
+ "accept": "application/json",
15
+ "x-apikey": API_KEY
16
+ }
17
+
18
+ try:
19
+ response = requests.get(endpoint, headers=headers)
20
+
21
+ if response.status_code == 200:
22
+ data = response.json()
23
+ stats = data['data']['attributes']['last_analysis_stats']
24
+ return stats
25
+ elif response.status_code == 404:
26
+ return "Belum Pernah Diimbas"
27
+ else:
28
+ return f"Ralat API (Kod: {response.status_code})"
29
+
30
+ except Exception as e:
31
+ return f"Ralat Sistem: {e}"
32
+
33
+ def proses_fail_url(fail_input, fail_output):
34
+ """Membaca fail input, menyemak URL, dan menulis hasil ke fail output"""
35
+ try:
36
+ # 1. Baca senarai URL daripada fail
37
+ with open(fail_input, 'r') as f:
38
+ # .strip() digunakan untuk membuang ruang kosong atau baris kosong
39
+ senarai_url = [talian.strip() for talian in f.readlines() if talian.strip()]
40
+
41
+ if not senarai_url:
42
+ print(f"❌ Fail {fail_input} kosong.")
43
+ return
44
+
45
+ print(f"📂 Menemui {len(senarai_url)} pautan untuk diperiksa.\n")
46
+
47
+ # 2. Buka fail output untuk menulis keputusan imbasan
48
+ with open(fail_output, 'w') as f_out:
49
+ f_out.write("=== LAPORAN SEMAKAN KESELAMATAN URL ===\n\n")
50
+
51
+ for indeks, url in enumerate(senarai_url, 1):
52
+ print(f"[{indeks}/{len(senarai_url)}] Sedang menyemak: {url}")
53
+
54
+ hasil = semak_reputasi_url(url)
55
+
56
+ f_out.write(f"URL: {url}\n")
57
+
58
+ if isinstance(hasil, dict):
59
+ # Jika berjaya mendapat statistik daripada VirusTotal
60
+ f_out.write(f" - Berbahaya (Malicious): {hasil['malicious']}\n")
61
+ f_out.write(f" - Pancingan Data (Phishing): {hasil['phishing']}\n")
62
+ f_out.write(f" - Selamat (Harmless): {hasil['harmless']}\n")
63
+
64
+ if hasil['malicious'] > 0 or hasil['phishing'] > 0:
65
+ f_out.write(" STATUS: ⚠️ BAHAYA\n")
66
+ else:
67
+ f_out.write(" STATUS: ✅ SELAMAT\n")
68
+ else:
69
+ # Jika berlaku ralat atau URL belum pernah diimbas
70
+ f_out.write(f" STATUS/NOTA: {hasil}\n")
71
+
72
+ f_out.write("-" * 40 + "\n")
73
+
74
+ # NOTA KESELAMATAN (API Percuma):
75
+ # Akaun VirusTotal percuma menghadkan 4 permintaan (requests) seminit.
76
+ # Kita letakkan ubat "rehat" 15 saat antara setiap semakan supaya API tidak disekat.
77
+ time.sleep(15)
78
+
79
+ print(f"\n✅ Selesai! Laporan penuh telah disimpan dalam fail '{fail_output}'.")
80
+
81
+ except FileNotFoundError:
82
+ print(f"❌ Fail '{fail_input}' tidak ditemui. Sila pastikan fail tersebut wujud dalam folder yang sama.")
83
+
84
+ # --- Jalankan Program ---
85
+ if __name__ == "__main__":
86
+ FAIL_INPUT = "senarai_url.txt"
87
+ FAIL_OUTPUT = "laporan_keselamatan.txt"
88
+
89
+ proses_fail_url(FAIL_INPUT, FAIL_OUTPUT)
@@ -0,0 +1,48 @@
1
+ import time
2
+ from ping3 import ping
3
+
4
+ # Setkan 3 angka pertama IP router awak (Sebab IP telefon awak 192.168.1.222)
5
+ IP_ROUTER = "192.168.1"
6
+
7
+ # MASUKKAN SENARAI KAWAN (Sila daftar telefon awak di sini)
8
+ peranti_dikenali = {
9
+ "192.168.1.1": "Router Utama Wi-Fi",
10
+ "192.168.1.177": "AminWhite PC",
11
+ "192.168.1.178": "Amin Iphone",
12
+ "192.168.1.222": "Telefon Saya (Termux)" # Ini IP unik telefon awak!
13
+ }
14
+
15
+ # ... (kod selebihnya di bawah kekalkan sama seperti sebelum ini)
16
+
17
+ def imbas_rangkaian():
18
+ print(f"\n[{time.strftime('%H:%M:%S')}] 🔍 Mula mengintai peranti pada router...")
19
+
20
+ # Imbas IP dari .1 hingga .20 (awak boleh naikkan sampai .254 jika peranti banyak)
21
+ for i in range(1, 255):
22
+ ip_target = f"{IP_ROUTER}.{i}"
23
+
24
+ # Cuba hantar ping singkat (timeout 0.2 saat supaya laju)
25
+ respons = ping(ip_target, timeout=0.2)
26
+
27
+ # Jika peranti itu AKTIF (ia menjawab ping)
28
+ if respons is not None:
29
+ # Periksa sama ada peranti itu dikenali atau asing
30
+ if ip_target in peranti_dikenali:
31
+ print(f"[🟢 AMAN] Dikesan: {peranti_dikenali[ip_target]} ({ip_target})")
32
+ else:
33
+ # 3. GAGALKAN / AMARAN jika ada penceroboh
34
+ print(f"[🚨 AMARAN PENCEROBOH!] Peranti asing dikesan di IP: {ip_target}")
35
+
36
+ # Sini kita simpan log pencerobohan ke fail teks secara automatik
37
+ with open("log_router.txt", "a") as f:
38
+ f.write(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] IP PENCEROBOH: {ip_target}\n")
39
+ print(f"[💾 LOG] Jejak penceroboh telah disimpan ke 'log_router.txt'!")
40
+
41
+ # Jalankan skrip ini setiap 30 saat untuk intai router secara berterusan
42
+ try:
43
+ while True:
44
+ imbas_rangkaian()
45
+ print("\n[*] Menunggu 30 saat sebelum intipan seterusnya... (Ctrl+C untuk berhenti)")
46
+ time.sleep(30)
47
+ except KeyboardInterrupt:
48
+ print("\n[*] Skrip pengawal router ditutup.")
@@ -0,0 +1,5 @@
1
+ === LAPORAN SEMAKAN KESELAMATAN URL ===
2
+
3
+ URL: http://pautan-mencurigakan-1.com
4
+ STATUS/NOTA: Belum Pernah Diimbas
5
+ ----------------------------------------
File without changes
@@ -0,0 +1,44 @@
1
+ [2026-05-31 18:14:18] IP PENCEROBOH: 192.168.1.109
2
+ [2026-05-31 18:14:27] IP PENCEROBOH: 192.168.1.156
3
+ [2026-05-31 18:14:40] IP PENCEROBOH: 192.168.1.219
4
+ [2026-05-31 18:16:48] IP PENCEROBOH: 192.168.1.109
5
+ [2026-05-31 18:16:57] IP PENCEROBOH: 192.168.1.156
6
+ [2026-05-31 18:16:59] IP PENCEROBOH: 192.168.1.165
7
+ [2026-05-31 18:22:11] IP PENCEROBOH: 192.168.1.219
8
+ [2026-05-31 18:23:10] IP PENCEROBOH: 192.168.1.109
9
+ [2026-05-31 18:23:19] IP PENCEROBOH: 192.168.1.156
10
+ [2026-05-31 18:23:21] IP PENCEROBOH: 192.168.1.165
11
+ [2026-05-31 18:23:23] IP PENCEROBOH: 192.168.1.174
12
+ [2026-05-31 18:23:32] IP PENCEROBOH: 192.168.1.219
13
+ [2026-05-31 18:24:31] IP PENCEROBOH: 192.168.1.109
14
+ [2026-05-31 18:25:21] IP PENCEROBOH: 192.168.1.156
15
+ [2026-05-31 18:25:23] IP PENCEROBOH: 192.168.1.165
16
+ [2026-05-31 18:25:24] IP PENCEROBOH: 192.168.1.174
17
+ [2026-05-31 18:25:33] IP PENCEROBOH: 192.168.1.219
18
+ [2026-05-31 18:27:14] IP PENCEROBOH: 192.168.1.109
19
+ [2026-05-31 18:27:23] IP PENCEROBOH: 192.168.1.156
20
+ [2026-05-31 18:27:25] IP PENCEROBOH: 192.168.1.165
21
+ [2026-05-31 18:28:35] IP PENCEROBOH: 192.168.1.109
22
+ [2026-05-31 18:28:44] IP PENCEROBOH: 192.168.1.156
23
+ [2026-05-31 18:28:46] IP PENCEROBOH: 192.168.1.165
24
+ [2026-05-31 18:28:48] IP PENCEROBOH: 192.168.1.174
25
+ [2026-05-31 18:28:57] IP PENCEROBOH: 192.168.1.219
26
+ [2026-05-31 18:29:56] IP PENCEROBOH: 192.168.1.109
27
+ [2026-05-31 18:29:56] IP PENCEROBOH: 192.168.1.110
28
+ [2026-05-31 18:30:05] IP PENCEROBOH: 192.168.1.156
29
+ [2026-05-31 18:30:07] IP PENCEROBOH: 192.168.1.165
30
+ [2026-05-31 18:30:09] IP PENCEROBOH: 192.168.1.174
31
+ [2026-05-31 18:30:18] IP PENCEROBOH: 192.168.1.219
32
+ [2026-05-31 18:31:25] IP PENCEROBOH: 192.168.1.109
33
+ [2026-05-31 18:31:25] IP PENCEROBOH: 192.168.1.110
34
+ [2026-05-31 18:31:34] IP PENCEROBOH: 192.168.1.156
35
+ [2026-05-31 18:31:36] IP PENCEROBOH: 192.168.1.165
36
+ [2026-05-31 18:31:38] IP PENCEROBOH: 192.168.1.174
37
+ [2026-05-31 18:36:57] IP PENCEROBOH: 192.168.1.156
38
+ [2026-05-31 18:36:59] IP PENCEROBOH: 192.168.1.165
39
+ [2026-05-31 18:37:10] IP PENCEROBOH: 192.168.1.219
40
+ [2026-06-01 00:47:26] IP PENCEROBOH: 192.168.1.109
41
+ [2026-06-01 00:47:35] IP PENCEROBOH: 192.168.1.156
42
+ [2026-06-01 00:47:37] IP PENCEROBOH: 192.168.1.165
43
+ [2026-06-01 00:47:39] IP PENCEROBOH: 192.168.1.174
44
+ [2026-06-01 00:47:48] IP PENCEROBOH: 192.168.1.219
@@ -0,0 +1,98 @@
1
+ import time
2
+ import os
3
+ import re
4
+
5
+ LOG_FILE = "perangkap_keselamatan.log"
6
+ KATA_KUNCI_BAHAYA = ["CRITICAL", "FAILED", "UNAUTHORIZED", "ATTACK", "PERANGKAP", "NIKTO", "SQLMAP", "NMAP"]
7
+
8
+ # Kod warna ANSI
9
+ MERAH = "\033[91m"
10
+ HIJAU = "\033[92m"
11
+ KUNING = "\033[93m"
12
+ BIRU = "\033[94m"
13
+ RESET = "\033[0m"
14
+
15
+ # Pemboleh ubah statistik
16
+ IP_DISEKAT = set()
17
+ JUMLAH_AMARAN = 0 # <--- Pembilang amaran baru
18
+
19
+ def ekstrak_dan_sekat_ip(baris_teks):
20
+ """Fungsi Regex untuk mencari IP dan simulasi sekatan"""
21
+ corak_ip = r"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b"
22
+ jumpaan = re.search(corak_ip, baris_teks)
23
+
24
+ if jumpaan:
25
+ ip_penyerang = jumpaan.group()
26
+ if ip_penyerang not in IP_DISEKAT:
27
+ IP_DISEKAT.add(ip_penyerang)
28
+ print(f"{MERAH}[TINDAKAN BALAS] ==> AUTOMATIK: Menghantar arahan Firewall untuk menyekat IP: {ip_penyerang}{RESET}")
29
+ print(f"{KUNING}[FIREWALL LOG] IP {ip_penyerang} telah dimasukkan ke dalam senarai HITAM (DROP IP).{RESET}")
30
+ else:
31
+ print(f"{KUNING}[INFO] IP {ip_penyerang} memang sudah berada dalam senarai sekatan.{RESET}")
32
+
33
+ def semak_baris(baris_teks):
34
+ global JUMLAH_AMARAN
35
+ baris_bersih = baris_teks.strip()
36
+ if not baris_bersih:
37
+ return
38
+
39
+ for kata in KATA_KUNCI_BAHAYA:
40
+ if kata in baris_bersih.upper():
41
+ JUMLAH_AMARAN += 1 # Tambah 1 jika ada amaran tercetus
42
+ print("\n" + f"{MERAH}!" * 50)
43
+ print(f"[AMARAN KESELAMATAN] Mengesan aktiviti mencurigakan!")
44
+ print(f"Log: {baris_bersih}")
45
+ print("!" * 50 + f"{RESET}")
46
+
47
+ ekstrak_dan_sekat_ip(baris_bersih)
48
+ print()
49
+ break
50
+ else:
51
+ print(f"{HIJAU}[INFO LOG]{RESET} {baris_bersih}")
52
+
53
+ def cetak_dashboard():
54
+ """Fungsi baru untuk memaparkan rumusan keselamatan ala SOC Dashboard"""
55
+ print("\n" + "=" * 50)
56
+ print(f"{BIRU} SOC INCIDENT REPORT SUMMARY {RESET}")
57
+ print("=" * 50)
58
+ print(f" Status Sistem : {HIJAU}BERJAYA DISELAMATKAN{RESET}")
59
+ print(f" Jumlah Ancaman/Alert: {MERAH}{JUMLAH_AMARAN}{RESET}")
60
+ print(f" Jumlah IP Disekat : {KUNING}{len(IP_DISEKAT)}{RESET}")
61
+ print("-" * 50)
62
+ if IP_DISEKAT:
63
+ print(f" Senarai IP Hitam : {MERAH}{', '.join(IP_DISEKAT)}{RESET}")
64
+ else:
65
+ print(" Senarai IP Hitam : Tiada IP disekat dalam sesi ini.")
66
+ print("=" * 50 + "\n")
67
+
68
+ def pantau_log():
69
+ print("=" * 50)
70
+ print(f"{KUNING} SYSTEM MONITORING ACTIVE: Memantau {LOG_FILE}... {RESET}")
71
+ print("=" * 50)
72
+
73
+ if not os.path.exists(LOG_FILE):
74
+ with open(LOG_FILE, "w") as f:
75
+ pass
76
+
77
+ print(f"\n[+] Membaca sejarah log terdahulu...")
78
+ with open(LOG_FILE, "r") as f:
79
+ baris_lama = f.readlines()
80
+ for baris in baris_lama[-10:]:
81
+ semak_baris(baris)
82
+ print(f"[+] Selesai membaca sejarah. Memulakan pemantauan masa-nyata...\n")
83
+
84
+ with open(LOG_FILE, "r") as f:
85
+ f.seek(0, os.SEEK_END)
86
+ while True:
87
+ baris = f.readline()
88
+ if not baris:
89
+ time.sleep(1)
90
+ continue
91
+ semak_baris(baris)
92
+
93
+ if __name__ == "__main__":
94
+ try:
95
+ pantau_log()
96
+ except KeyboardInterrupt:
97
+ # Panggil dashboard laporan apabila pengguna menutup skrip
98
+ cetak_dashboard()
@@ -0,0 +1,54 @@
1
+ import datetime
2
+
3
+ # 1. Tetapkan "Umpan" (Akaun palsu yang dipantau)
4
+ HONEY_USER = "admin_super"
5
+ HONEY_PASSWORD = "PasswordRahsia123"
6
+
7
+ def rekod_perangkap(log_type, data_user, ip_address, user_agent):
8
+ """Fungsi untuk merekod aktiviti scammer ke dalam fail log kesedaran siber"""
9
+ masa_sekarang = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
10
+
11
+ with open("perangkap_keselamatan.log", "a") as f:
12
+ f.write(f"[{masa_sekarang}] === ⚠️ PERANGKAP DICETUSKAN ===\n")
13
+ f.write(f"Jenis Ancaman: {log_type}\n")
14
+ f.write(f"Nama Pengguna Dicuba: {data_user}\n")
15
+ f.write(f"Alamat IP Penyerang: {ip_address}\n")
16
+ f.write(f"Maklumat Peranti/Browser: {user_agent}\n")
17
+ f.write("-" * 50 + "\n")
18
+
19
+ def simulasi_sistem_log_masuk(username_input, password_input, ip_asal, browser_input):
20
+ """Simulasi sistem yang memeriksa sama ada log masuk itu dari pengguna biasa atau penyerang"""
21
+
22
+ # KES 1: Penyerang memakan umpan dan cuba menggunakan maklumat Honeytoken
23
+ if username_input == HONEY_USER:
24
+ print("\n[SISTEM] Akses disekat! Amaran keselamatan telah dihantar ke pusat kawalan.")
25
+ # Rekodkan maklumat penyerang secara senyap untuk analisis
26
+ rekod_perangkap("Cubaan Menggunakan Honeytoken (Umpan)", username_input, ip_asal, browser_input)
27
+ return False
28
+
29
+ # KES 2: Pengguna biasa (Log masuk normal)
30
+ elif username_input == "user_biasa" and password_input == "password123":
31
+ print("\n[SISTEM] Log masuk berjaya untuk pengguna biasa.")
32
+ return True
33
+
34
+ # KES 3: Salah taip biasa
35
+ else:
36
+ print("\n[SISTEM] Log masuk gagal. Nama pengguna atau kata laluan salah.")
37
+ return False
38
+
39
+ # --- SIMULASI SITUASI SERANGAN ---
40
+ if __name__ == "__main__":
41
+ print("Sistem Pertahanan Perangkap Python Aktif...\n")
42
+
43
+ # Situasi: Scammer mendapat maklumat umpan daripada borang phishing,
44
+ # dan sekarang cuba log masuk ke pelayan anda menggunakan maklumat tersebut.
45
+
46
+ ip_scammer = "198.51.100.42" # Contoh IP luar simulasian
47
+ peranti_scammer = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/SecrecyBrowser"
48
+
49
+ print("--- Senario: Scammer Cuba Memasuki Sistem ---")
50
+ user_dicuba = input("Masukkan Nama Pengguna: ")
51
+ pass_dicuba = input("Masukkan Kata Laluan: ")
52
+
53
+ # Jalankan pemeriksaan keselamatan
54
+ simulasi_sistem_log_masuk(user_dicuba, pass_dicuba, ip_scammer, peranti_scammer)
File without changes
@@ -0,0 +1,47 @@
1
+ import socket
2
+ import sys
3
+
4
+ # Konfigurasi Umpan
5
+ HOST = '192.168.1.222'
6
+ PORT = 8080
7
+
8
+ # Senarai Hitam (Blacklist) untuk menggagalkan penyerang
9
+ blacklist_ip = set()
10
+
11
+ # Bina soket pertahanan
12
+ server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
13
+ server.bind((HOST, PORT))
14
+ server.listen(5)
15
+
16
+ print(f"[*] Sistem Pertahanan Aktif! Mengintai di port {PORT}...")
17
+
18
+ try:
19
+ while True:
20
+ client_conn, client_addr = server.accept()
21
+ ip_pengunjung = client_addr[0]
22
+
23
+ # GAGALKAN SERTA-MERTA jika IP sudah ada dalam senarai hitam
24
+ if ip_pengunjung in blacklist_ip:
25
+ print(f"[🚫 BLACKLIST] Percubaan sekatan semula daripada {ip_pengunjung} DIGAGALKAN AUTOMATIK!")
26
+ client_conn.close()
27
+ continue
28
+
29
+ # INTAI data yang dihantar
30
+ data = client_conn.recv(1024).decode('utf-8', errors='ignore')
31
+
32
+ if data:
33
+ print(f"\n[👁️ INTAI] Sambungan diterima dari: {ip_pengunjung}")
34
+ print(f"[📝 DATA DETECTED]: {data.strip()}")
35
+
36
+ # ANALISIS & GAGALKAN jika mengandungi perkataan bahaya
37
+ if "serang" in data.lower() or "hack" in data.lower():
38
+ print(f"[⚠️ AMARAN] Aktiviti berbahaya dikesan dari {ip_pengunjung}!")
39
+ print(f"[🔒 ACTION] Memasukkan {ip_pengunjung} ke dalam Blacklist!")
40
+ blacklist_ip.add(ip_pengunjung) # Masukkan dalam senarai hitam
41
+
42
+ # Putuskan sambungan
43
+ client_conn.close()
44
+
45
+ except KeyboardInterrupt:
46
+ print("\n[*] Menutup sistem pertahanan.")
47
+ sys.exit()
@@ -0,0 +1,2 @@
1
+ scapy
2
+ androguard