Files
loogle-scripts/scripts/pi1-master/dhcp-alert.sh

58 lines
2.2 KiB
Bash

#!/bin/bash
# --- CONFIGURAZIONE TELEGRAM ---
# 👇👇 INSERISCI I TUOI DATI VERI QUI 👇👇
BOT_TOKEN="8155587974:AAF9OekvBpixtk8ZH6KoIc0L8edbhdXt7A4"
CHAT_ID="64463169"
# 👆👆 FINE MODIFICHE 👆👆
# --- FILE DI STATO ---
KNOWN_MACS_FILE="/etc/pihole/known_macs.txt"
# Dati ricevuti da dnsmasq
ACTION=$1
MAC=$2
IP=$3
HOSTNAME=$4
# Se l'hostname è vuoto, mettiamo un placeholder
if [ -z "$HOSTNAME" ]; then HOSTNAME="[Nessun Hostname]"; fi
# Ci interessano solo le azioni di assegnazione IP ('add' o 'old')
if [[ "$ACTION" == "add" || "$ACTION" == "old" ]]; then
# Assicura che il file dei MAC esista e sia scrivibile
if [ ! -f "$KNOWN_MACS_FILE" ]; then
touch "$KNOWN_MACS_FILE" && chmod 666 "$KNOWN_MACS_FILE"
fi
# Cerca il MAC address nel file dei conosciuti
if ! grep -q "$MAC" "$KNOWN_MACS_FILE"; then
# === NUOVO DISPOSITIVO RILEVATO! ===
# --- NOVITÀ: Lookup Vendor ---
# Usiamo un'API esterna gratuita per trovare il produttore.
# Impostiamo un timeout stretto (3s connessione, 5s totale) per non bloccare il DHCP se l'API è lenta.
VENDOR=$(curl -s --connect-timeout 3 --max-time 5 "https://api.macvendors.com/$MAC")
# Se l'API fallisce, è vuota o restituisce errore, mettiamo un default.
# (Nota: alcune API restituiscono "Not Found" come testo puro se non trovano il vendor)
if [ -z "$VENDOR" ] || [[ "${VENDOR,,}" == *"not found"* ]] || [[ "${VENDOR,,}" == *"error"* ]]; then
VENDOR="[Sconosciuto / API Timeout]"
fi
# 1. Invia notifica Telegram (silenziosa)
# Aggiunta la riga 🏭 **Vendor:**
MSG="🚨 **NUOVO DISPOSITIVO IN RETE!**%0A%0A💻 **Host:** $HOSTNAME%0A📟 **MAC:** \`$MAC\`%0A🏭 **Vendor:** $VENDOR%0A🌐 **IP:** $IP"
curl -s -X POST "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" -d chat_id="$CHAT_ID" -d text="$MSG" -d parse_mode="Markdown" > /dev/null 2>&1
# 2. Aggiungi il MAC alla lista dei conosciuti
# Salviamo anche il vendor nel file di testo per comodità futura
{
flock -x 200
echo "$MAC # Aggiunto il $(date) - Vendor: $VENDOR - Host: $HOSTNAME" >> "$KNOWN_MACS_FILE"
} 200>"$KNOWN_MACS_FILE.lock"
fi
fi