Update debian/set_mac_wifi.sh

This commit is contained in:
2026-02-15 11:23:25 +00:00
parent f9ac2891f5
commit ed23bc3461
+70 -29
View File
@@ -53,7 +53,7 @@ set_mac() {
setup_udev_persistence() { setup_udev_persistence() {
local interface="$1" local interface="$1"
local target_mac="$2" local target_mac="$2"
local original_mac local original_mac
original_mac=$(ip link show "$interface" | awk '/ether/ {print $2}' | tr '[:upper:]' '[:lower:]') original_mac=$(ip link show "$interface" | awk '/ether/ {print $2}' | tr '[:upper:]' '[:lower:]')
target_mac=$(echo "$target_mac" | tr '[:upper:]' '[:lower:]') target_mac=$(echo "$target_mac" | tr '[:upper:]' '[:lower:]')
@@ -63,11 +63,29 @@ setup_udev_persistence() {
return 1 return 1
fi fi
# Cria o ficheiro de regras # Cria o conteúdo da regra
echo "ACTION==\"add\", SUBSYSTEM==\"net\", ATTR{address}==\"$original_mac\", RUN+=\"/usr/bin/ip link set dev \$name address $target_mac\"" > "$UDEV_RULES_FILE" local rule_content="ACTION==\"add\", SUBSYSTEM==\"net\", ATTR{address}==\"$original_mac\", RUN+=\"/usr/bin/ip link set dev \$name address $target_mac\""
udevadm control --reload-rules # Escreve no ficheiro de regras
log "Regra Udev criada/atualizada em $UDEV_RULES_FILE." echo "$rule_content" > "$UDEV_RULES_FILE"
# Verifica se o ficheiro foi criado com sucesso
if [ -f "$UDEV_RULES_FILE" ]; then
log "Sucesso: Ficheiro de regras Udev criado em $UDEV_RULES_FILE."
log "Conteúdo da regra: $rule_content"
else
log "Erro: Falha ao criar o ficheiro de regras Udev em $UDEV_RULES_FILE."
return 1
fi
# Recarrega as regras do udev
if udevadm control --reload-rules; then
log "Regras Udev recarregadas com sucesso."
else
log "Erro: Falha ao recarregar regras Udev."
return 1
fi
return 0 return 0
} }
@@ -144,36 +162,59 @@ fi
# 3. Determinar o MAC Address # 3. Determinar o MAC Address
TARGET_MAC="" TARGET_MAC=""
# Função para perguntar confirmação ao utilizador
ask_confirmation() {
local message="$1"
local default="$2" # "y" or "n"
while true; do
if [ "$default" = "y" ]; then
read -p "$message [Y/n]: " choice < /dev/tty
else
read -p "$message [y/N]: " choice < /dev/tty
fi
# Default choice if user just presses Enter
if [ -z "$choice" ]; then
choice="$default"
fi
case "$choice" in
y|Y|yes|Yes|YES)
return 0
;;
n|N|no|No|NO)
return 1
;;
*)
echo "Por favor, responda sim ou não."
;;
esac
done
}
# Verificar argumento ($1) # Verificar argumento ($1)
if [ -n "$1" ]; then if [ -n "$1" ]; then
TARGET_MAC="$1" TARGET_MAC="$1"
log "MAC definido via argumento: $TARGET_MAC" log "MAC definido via argumento: $TARGET_MAC"
else else
# Verificar se é interativo # Verificar se é interativo
# IMPORTANTE: Ler de /dev/tty para funcionar com curl | bash
if [ -t 0 ] && [ -e /dev/tty ]; then if [ -t 0 ] && [ -e /dev/tty ]; then
# Abre /dev/tty para ler input do utilizador # Pergunta ao utilizador se quer gerar um MAC automaticamente
exec < /dev/tty if ask_confirmation "Deseja gerar um novo MAC único automaticamente?" "y"; then
TARGET_MAC=$(generate_unique_mac)
echo "Nenhum MAC definido. Deseja:" log "MAC gerado automaticamente: $TARGET_MAC"
echo "1) Gerar um novo MAC único automático" else
echo "2) Introduzir um MAC manualmente" # Pergunta para introduzir MAC manualmente
read -p "Opção [1/2]: " choice while true; do
read -p "Introduza o MAC (formato XX:XX:XX:XX:XX:XX): " TARGET_MAC < /dev/tty
case "$choice" in if [[ "$TARGET_MAC" =~ ^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$ ]]; then
1) break
TARGET_MAC=$(generate_unique_mac) else
log "MAC gerado automaticamente: $TARGET_MAC" echo "Formato de MAC inválido. Por favor, introduza no formato XX:XX:XX:XX:XX:XX."
;; fi
2) done
read -p "Introduza o MAC (formato XX:XX:XX:XX:XX:XX): " TARGET_MAC fi
;;
*)
log "Opção inválida."
exit 1
;;
esac
# Restaura stdin se necessário (embora geralmente não seja crítico aqui)
else else
# Modo não interativo (boot/curl) sem argumentos: Gerar automático # Modo não interativo (boot/curl) sem argumentos: Gerar automático
log "Execução não interativa. A gerar MAC único..." log "Execução não interativa. A gerar MAC único..."