Usar launchd para cambiar la dirección MAC cuando se une a una red Wi-Fi específica

1

Estoy tratando de usar launchd para resolver lo mencionado anteriormente.

Tengo un archivo networkchange.plist de la siguiente manera:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" \
 "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>NetworkChange</string>
  <key>LowPriorityIO</key>
  <true/>
  <key>ProgramArguments</key>
  <array>
      <string>*some path*/networkchangeaction.sh</string>
  </array>
  <key>WatchPaths</key>
  <array>
    <string>/etc/resolv.conf</string>
    <string>/var/run/resolv.conf</string>
    <string>/private/var/run/resolv.conf</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

Al usar sudo launchctl load -w /Library/LaunchDaemons/networkchange.plist después de moverlo a su lugar, ejecuta mi script bash muy bien cuando cambio las redes Wi-Fi.

Mi script networkchangeaction.sh :

#!/bin/bash

lock="/tmp/networkchange.lock"
triggerssid="someSSID"
macaddress="7c:c5:d7:f2:09:23"
ssid=$(networksetup -getairportnetwork en0 | awk -F": " '{print $2}')

if mkdir "$lock"; then    # my attempt at solving the infinite call loop
    trap 'sudo rm -rf "$lock"' 0    # $lock is kinda like a mutex
    if [ "$ssid" == "$triggerssid" ]; then
        sudo ifconfig en0 ether $macaddress    # change MAC address
        sudo ifconfig en0 down    # restart wifi interface
        sudo ifconfig en0 up
        sleep 2                   # wait for it to restart, then join $triggerssid
        sudo networksetup -setairportnetwork en0 $triggerssid *wifi wpa2*
    fi
else
    exit 0
fi

Mi problema es que el script se llama infinitamente ya que vuelve a unirse a la red después de cambiar la dirección MAC. Intenté resolver esto con un "mutex" (como se recomienda aquí ), para que solo pueda ejecutarse una instancia de este script en una vez, pero de alguna manera todavía se llama continuamente.

¿Cómo podría resolver este problema para que el script no se active por sí solo?

    
pregunta krispet krispet 16.02.2017 - 21:52

0 respuestas

Lea otras preguntas en las etiquetas