wellnpm 2.0.10 → 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.
- package/aicond/R134a_pro.py +105 -0
- package/aicond/Refrigerant_Master.py +287 -0
- package/aicond/Refrigerant_Master_Car.py +184 -0
- package/aicond/ac_kereta.py +105 -0
- package/guard/README.md +9 -0
- package/guard/intai_ping.py +27 -0
- package/guard/inteligen_ancaman_siber.py +53 -0
- package/guard/inteligen_ancaman_siber1.py +89 -0
- package/guard/jaga_router.py +48 -0
- package/guard/laporan_keselamatan.txt +5 -0
- package/guard/log_multigas.txt +0 -0
- package/guard/log_router.txt +44 -0
- package/guard/pantau_log.py +98 -0
- package/guard/perangkap.py +54 -0
- package/guard/perangkap_keselamatan.log +0 -0
- package/guard/pertahan.py +47 -0
- package/guard/requirements.txt +2 -0
- package/guard/scan_apk.py +82 -0
- package/guard/senarai_url.txt +3 -0
- package/guard/server.py +67 -0
- package/guard/server1.py +74 -0
- package/guard/texlive.profile +29 -0
- package/loan/hutang.py +175 -0
- package/package.json +1 -1
|
@@ -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...")
|
package/guard/README.md
ADDED
|
@@ -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.")
|
|
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()
|