Update debian/set_mac_wifi.sh
This commit is contained in:
Vendored
+64
-4
@@ -1,9 +1,10 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# Script to set fixed MAC address and disable Wi-Fi if eth0 configuration succeeds
|
# Script to set fixed MAC address and disable Wi-Fi if eth0 configuration succeeds
|
||||||
# Must be run with sudo!
|
# Must be run with sudo!
|
||||||
|
# Update: Agora gera um MAC único automaticamente se nenhum for especificado (resolver problema do DM9601).
|
||||||
|
|
||||||
# --- Configuration ---
|
# --- Configuration ---
|
||||||
ETH0_MAC="00:00:00:00:00:00" # Default MAC - will be changed by setup script
|
ETH0_MAC="00:00:00:00:00:00" # Default MAC - será alterado automaticamente se mantiver este valor
|
||||||
# WLAN0_MAC="XX:XX:XX:XX:XX:XX" # Uncomment and set if needed
|
# WLAN0_MAC="XX:XX:XX:XX:XX:XX" # Uncomment and set if needed
|
||||||
|
|
||||||
# Verify root privileges
|
# Verify root privileges
|
||||||
@@ -113,9 +114,68 @@ disable_wifi() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# --- Execution ---
|
# --- Novas Funções Complementares (Dinâmicas) ---
|
||||||
# Set MAC for eth0 and disable Wi-Fi if successful
|
|
||||||
|
# Função para gerar um MAC único baseado no Serial do Raspberry Pi
|
||||||
|
# Garante que cada dispositivo fica com um MAC diferente mas consistente
|
||||||
|
generate_unique_mac() {
|
||||||
|
local serial
|
||||||
|
serial=$(awk '/Serial/ {print $3}' /proc/cpuinfo | tr -d ' ')
|
||||||
|
|
||||||
|
if [ -z "$serial" ]; then
|
||||||
|
# Fallback aleatório caso não encontre serial
|
||||||
|
printf '%02X:%02X:%02X:%02X:%02X:%02X' $((0x02 | (RANDOM % 256) & 0xFE)) $((RANDOM % 256)) $((RANDOM % 256)) $((RANDOM % 256)) $((RANDOM % 256)) $((RANDOM % 256))
|
||||||
|
else
|
||||||
|
# Gera hash do serial para criar os octetos
|
||||||
|
local hash
|
||||||
|
hash=$(echo -n "$serial-dm9601" | md5sum | cut -c1-10)
|
||||||
|
# 02 define como Local Admin Address
|
||||||
|
echo "02:${hash:0:2}:${hash:2:2}:${hash:4:2}:${hash:6:2}:${hash:8:2}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Função para criar regra Udev persistente (Best Practice)
|
||||||
|
# Isto faz com que o MAC seja aplicado no boot, evitando erros de "Device Busy"
|
||||||
|
setup_udev_persistence() {
|
||||||
|
local interface="$1"
|
||||||
|
local target_mac="$2"
|
||||||
|
local log_file="/var/log/set_mac.log"
|
||||||
|
|
||||||
|
# Obtém o MAC original (físico) do adaptador
|
||||||
|
local original_mac
|
||||||
|
original_mac=$(ip link show "$interface" | awk '/ether/ {print $2}' | tr '[:upper:]' '[:lower:]')
|
||||||
|
target_mac=$(echo "$target_mac" | tr '[:upper:]' '[:lower:]')
|
||||||
|
|
||||||
|
if [ -z "$original_mac" ]; then return 1; fi
|
||||||
|
|
||||||
|
local rules_file="/etc/udev/rules.d/81-mac-spoof.rules"
|
||||||
|
|
||||||
|
# Se a regra já existe para este MAC original, não faz nada
|
||||||
|
if grep -q "$original_mac" "$rules_file" 2>/dev/null; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$(date): Criando regra udev persistente para $interface" | tee -a "$log_file"
|
||||||
|
echo "ACTION==\"add\", SUBSYSTEM==\"net\", ATTR{address}==\"$original_mac\", RUN+=\"/usr/bin/ip link set dev \$name address $target_mac\"" >> "$rules_file"
|
||||||
|
udevadm control --reload-rules
|
||||||
|
}
|
||||||
|
|
||||||
|
# --- Execução Principal ---
|
||||||
|
|
||||||
|
# LÓGICA COMPLEMENTAR:
|
||||||
|
# Se ETH0_MAC for o valor padrão (00:00...) ou vazio, gera um novo automaticamente.
|
||||||
|
if [ -z "$ETH0_MAC" ] || [ "$ETH0_MAC" == "00:00:00:00:00:00" ]; then
|
||||||
|
echo "$(date): Nenhum MAC específico definido. Gerando MAC único automático..." | tee -a /var/log/set_mac.log
|
||||||
|
ETH0_MAC=$(generate_unique_mac)
|
||||||
|
echo "$(date): Novo MAC gerado: $ETH0_MAC" | tee -a /var/log/set_mac.log
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Executa a lógica original com o MAC definido (seja o do config ou o gerado)
|
||||||
if set_mac "eth0" "$ETH0_MAC"; then
|
if set_mac "eth0" "$ETH0_MAC"; then
|
||||||
|
# Se definiu o MAC com sucesso, tenta criar persistência via Udev
|
||||||
|
# Isto resolve o problema do adapter mantendo o MAC em futuros boots
|
||||||
|
setup_udev_persistence "eth0" "$ETH0_MAC"
|
||||||
|
|
||||||
# Check if disable_wifi is already running
|
# Check if disable_wifi is already running
|
||||||
if ! pgrep -f "disable_wifi" > /dev/null; then
|
if ! pgrep -f "disable_wifi" > /dev/null; then
|
||||||
#configure_static_ip
|
#configure_static_ip
|
||||||
@@ -130,4 +190,4 @@ fi
|
|||||||
# Uncomment if you want to set MAC for wlan0 (optional)
|
# Uncomment if you want to set MAC for wlan0 (optional)
|
||||||
# if [[ -n "$WLAN0_MAC" ]]; then
|
# if [[ -n "$WLAN0_MAC" ]]; then
|
||||||
# set_mac "wlan0" "$WLAN0_MAC"
|
# set_mac "wlan0" "$WLAN0_MAC"
|
||||||
# fi
|
# fi
|
||||||
Reference in New Issue
Block a user