Script Python: deteksi_wifi.py E-3 jalankan (python deteksi_wifi.py)
import os
import platform
import subprocess
from datetime import datetime
import requests
import pyperclip
from mac_vendor_lookup import MacLookup
from collections import defaultdict
# Telegram config
TELEGRAM_TOKEN = "7713956922:AAHzqYnxu6TBKNWGqIlUgLWjdfhM2pEDFC4"
CHAT_ID = "1243483408"
def send_telegram_alert(ip, mac, vendor, count):
waktu = datetime.now().strftime("%d-%m-%Y %H:%M:%S")
pesan = (
f"šØ *PERANGKAT ASING TERDETEKSI* #{count}\n"
f"š
Waktu: {waktu}\n"
f"š» IP: `{ip}`\n"
f"š MAC: `{mac}`\n"
f"š¢ Vendor: {vendor}"
)
url = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage"
data = {"chat_id": CHAT_ID, "text": pesan, "parse_mode": "Markdown"}
try:
requests.post(url, data=data)
except Exception as e:
print(f"❌ Error Telegram: {e}")
def get_arp_table():
if platform.system() == "Windows":
output = subprocess.check_output("arp -a", shell=True, encoding='utf-8')
else:
output = subprocess.check_output(["arp", "-a"], encoding='utf-8')
return output
def is_valid_mac(mac):
# Hindari multicast/broadcast
if mac.startswith(("ff:ff", "01:00:5e")):
return False
return True
def parse_arp_output(arp_output):
devices = []
for line in arp_output.splitlines():
if "-" in line or ":" in line:
parts = line.split()
if len(parts) >= 2:
ip = parts[0]
mac = parts[1].lower().replace("-", ":")
if is_valid_mac(mac):
devices.append((ip, mac))
return devices
def load_whitelist():
try:
with open("whitelist.txt", "r") as f:
return [line.strip().lower() for line in f if line.strip()]
except FileNotFoundError:
return []
def read_blocklist():
try:
with open("blocklist.txt", "r") as f:
return set(line.strip().lower() for line in f if line.strip())
except FileNotFoundError:
return set()
def log_detection(ip, mac, vendor, count):
waktu = datetime.now().strftime("%d-%m-%Y %H:%M:%S")
with open("log_deteksi.txt", "a") as f:
f.write(f"[{waktu}] IP: {ip} | MAC: {mac} | Vendor: {vendor} | Ditemukan ke-{count}\n")
def update_blocklist(mac):
blocklist = read_blocklist()
if mac not in blocklist:
with open("blocklist.txt", "a") as b:
b.write(f"{mac}\n")
def main():
whitelist = load_whitelist()
arp_output = get_arp_table()
devices = parse_arp_output(arp_output)
mac_lookup = MacLookup()
block_counts = defaultdict(int)
foreign_macs = []
print("š Memindai jaringan...\n")
for ip, mac in devices:
if mac not in whitelist:
block_counts[mac] += 1
try:
vendor = mac_lookup.lookup(mac)
except:
vendor = "Tidak diketahui"
count = block_counts[mac]
print(f"šØ PERANGKAT ASING #{count}!")
print(f"❌ IP: {ip}")
print(f"❌ MAC: {mac}")
print(f"š¢ Vendor: {vendor}\n")
send_telegram_alert(ip, mac, vendor, count)
log_detection(ip, mac, vendor, count)
update_blocklist(mac)
foreign_macs.append(mac)
if foreign_macs:
all_mac = "\n".join(sorted(set(foreign_macs)))
pyperclip.copy(all_mac)
print("š Semua MAC asing disalin ke clipboard.")
else:
print("✅ Tidak ada perangkat asing ditemukan.")
print("\nš¦ Selesai.")
if __name__ == "__main__":
main()
Comments
Post a Comment