Belirli bir Wi-Fi ağına katılırken MAC adresini değiştirmek için başlatmayı kullanma


1

Yukarıda belirtilen sorunu çözmek için launchd kullanmaya çalışıyorum.

networkchange.plistAşağıdaki gibi bir dosya var :

<?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>

Kullanılması sudo launchctl load -w /Library/LaunchDaemons/networkchange.plistkendisine taşıdıktan sonra ben Kablosuz ağlar arasında geçiş yaparken benim bash komut dosyası sadece iyi çalıştırır yerdir.

Benim networkchangeaction.shbetiğim:

#!/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

Benim sorunum, MAC adresini değiştirdikten sonra betiğin ağa tekrar katılmasından dolayı sonsuz olarak adlandırılmasıdır. Bunu bir "muteks" ile çözmeyi denedim ( burada önerildiği gibi ), böylece bu betiğin yalnızca bir örneği bir seferde çalışabilir, ancak yine de sürekli olarak çağrılır.

Senaryonun kendisini tetiklememesi için bu problemi nasıl çözebilirim ?


Komut dosyasının sürekli olarak (tekrar tekrar) çağrılması, paralel yürütmeyi önlemek için bir muteks kullanmaktan farklıdır. Burada hangi problemi çözmeye çalışıyorsun?
nohillside

Ayrıca çalıştırmanın ifconfig, betiği tekrar tetikleyen izlenen dosyaların bazılarını değiştireceğini varsayardım .
yokuş yukarı

@ patrix soruyu açıklığa kavuşturdu. Sorun kesinlikle senaryosunun kendisini tetiklemesidir. İlk örnek hala çalışırken fırlatma komutunun çağrıldığını ve bu nedenle muteks çözümünü denedim.
krispet krispet
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.