Mac OS X IP yapılandırmasını konuma göre otomatik olarak değiştirir mi (Wifi ağı ile)?


10

Mac OS X, belirli bir ada sahip bir Wifi ağına bağlandığında ve diğer tüm Wifi ağlarında DHCP kullandığında, Havaalanı arayüzünü statik bir IP adresiyle otomatik olarak yapılandırmak için kurulabilir mi?

Şu anda iki IP adresi kurulumu arasında manuel olarak geçiş yapmak için Sistem Tercihleri'ndeki "Ağ" bölümünün "Konumlar" özelliğini kullanıyorum. Bir "statik IP" kurulumum ve varsayılan bir "DHCP" kurulumum var. Ancak bu, her konum değiştirişinde Konum açılır menüsünü değiştirmek için Sistem Tercihleri ​​girilmesini gerektirir. Bu otomatikleştirilebilir mi?

Tercihen bu, üçüncü taraf yazılımı olmadan yapılacaktır.

Yanıtlar:


8

Bu sadece işletim sistemi aracılığıyla yapılabilecek bir şey değildir.

Yukarıda belirtilen Konumlar, ücretsiz Airport Location veya MarcoPolo veya ücretli Network Location ile birlikte bir seçenektir . WiFiScriptor adlı bir AppleScript de yardımcı olabilir.

Ancak! Sistem Tercihleri -> -> [Konum açılır menüsü] ' ne girmenize gerek yoktur . Sen geçebilir Elma Menüsü -> Konum (6 hakkında seçenekleri aşağı) -> [İstediğiniz konumu seçin]

-b


1
Apple Menüsü'nden konum değiştirme hakkındaki ipucu için teşekkür ederiz. Yine de manuel olmasına rağmen, bu, birden fazla adımla Sistem Tercihlerine girmekten en azından biraz daha iyi hissettiriyor.
Markus Hallmann

Ayrıca, üçüncü taraf yazılım olmadan bunu (şu anda) mümkün olmadığını doğruladığınız için teşekkür ederiz.
Markus Hallmann

Havaalanı Konumu bağlantısı şimdi bir spam web sitesine işaret ediyor gibi görünüyor
Nat

9

Herhangi bir üçüncü taraf olmadan yapmak mümkündür, bkz. Https://github.com/rimar/wifi-location-changer


2
Sadece bunun çalışması için Konum adınızın wifi ağının SSID'si ile aynı olması gerektiğini eklemek istiyorum. Komut dosyasının mantığı, SSID'ye benzer bir ada sahip bir Konumu kontrol etmesi ve buna geçmesidir. Bu ada sahip bir Konum yoksa, varsayılan olarak otomatik / Otomatik olur.
Rystraum

Ayrıca, Yosemite üzerinde çalışmaya başlamadan önce oturumu kapatıp tekrar oturum açmak zorunda kaldım.
djule5

1

Muhtemelen sizin için işe yarayacak üçüncü taraf, ücretsiz olmayan bir çözüm Locations'dır .

Stackoverflow ile ilgili benzer ancak özdeş olmayan bir soruya önerildiği gibi , düzenli aralıklarla çalışan bir komut dosyası oluşturabilirsiniz. launchdbir kereden fazla çalışmasını engelleyecektir.

Psuedocode:

  • bir dosyadan save_wifi değeri al
  • current_wifi öğesini çıktı olarak ayarla networksetup -getairportnetwork AirPort
  • kaydedilmiş_wifi == current_wifi, çık
  • else networksetup -switchtolocation {location}{location}, bulunan wifi ağına bağlı olarak geçmek istediğiniz konumun adıdır.

DHCP'den bir adres beklemek üzere yapılandırılırken bir DHCP adresi sağlamayan yerel wifi'ye bağlanmada tavuk ve yumurta durumu olabilir.

-

Güncelleme: bir açık kaynak çözümü öneren olası yinelenen soru bulundu : MarcoPolo


1

Verilen cevap manuel olduğundan, otomatik olarak değiştiren basit bir komut dosyası:

WiFi ağlarınızın her birini yansıtacak şekilde Sistem Tercihleri> Ağ'da çeşitli konumlar oluşturun.

Komut dosyası: ( /usr/bin/autolocation.sh) Bunu tercih ettiğiniz bir yere koyun ve senaryodaki SSID değerlerini senaryoya göre değiştirin.

#!/bin/sh

#get the ssid of the network we are on
ssid=`ioreg -l -n AirPortDriver | grep 80211SSID | sed 's/|//g' | sed 's/"//g' | sed 's/  */ /g' | awk '{print $3}'`

if [ $ssid = "voicegear" ]
then
        location="Office / Home"
elif [ $ssid = "vijay" ]
then
        location="Office / Home"
elif [ $ssid = "SCTHO" ]
then
        location="Shriram Santhome"
else
        location="Automatic"
fi

#update the location
newloc=`/usr/sbin/scselect "${location}" | sed 's/^.*(\(.*\)).*$/\1/'`

echo "${newloc}"

Bu komut dosyası, kablosuz ağın SSID'sine bağlı olarak ağ konumunu (ayarları) değiştirir. Şimdi, ağ ayarlarında bir değişiklik olduğunda bu çalıştırılmalıdır. Aynısını yapmak için bir fırlatma aracısı oluşturacağız.

fırlatma plist: ( ~/Library/LaunchAgents/com.vg.netwatcher.plist)

<?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>Disabled</key>
        <false/>
        <key>Label</key>
        <string>com.vg.netwatcher</string>
        <key>Program</key>
        <string>/usr/bin/autolocation.sh</string>
        <key>LaunchEvents</key>
        <dict>
                <key>com.apple.notifyd.matching</key>
                <dict>
                        <key>com.apple.system.config.network_change</key>
                        <dict>
                                <key>Notification</key>
                                <string>com.apple.system.config.network_change</string>
                        </dict>
                </dict>
        </dict>
        <key>KeepAlive</key>
        <true/>
</dict>
</plist>

~/Library/LaunchAgentsBu makineyi kullanan tek kullanıcı olarak bu dosyayı (ev dizinimin içinde) oluşturdum . Küresel olmasını istiyorsanız, içine koyun /Library/LaunchAgents.

Bu dosyanın sahibi olmalı rootve 600izinleri olmalıdır:

sudo chown root Library/LaunchAgents/com.vg.netwatcher.pist
sudo chmod 600 Library/LauhchAgents/com.vg.netwatcher.plist

Sistemden çıktıktan / oturum açtıktan veya sistemi yeniden başlattığınızda, başlatma aracısı dosyayı nereye koyduğunuza (ana dizininiz veya global) bağlı olarak çalışmaya başlayacaktır. Ancak bunu yapmak istemiyorsanız ve şimdi yüklenmesini istiyorsanız, komut satırında aşağıdakileri çalıştırın. Sadece bir kez yapmalısın.

cd ~/Library/LaunchAgents
sudo launchctl load -w com.vg.netwatcher.plist

Bu kadar. Şimdi Mac'inizin IP'si otomatik olarak değişecek.

Not: El Capitan'da da çalışır!


1

Konum Değiştirici ile tanışın

WiFi SSID'ye dayalı ağ konumlarını değiştirmek için çok umut verici bir komut dosyası:

Anton Eprev tarafından yaratılmıştır . Kodu ve daha ayrıntılı belgeleri GitHub'da görüntüleyebilirsiniz:

Kurulum

Komut satırı üzerinden kurulur:

$ curl -L https://github.com/eprev/locationchanger/raw/master/locationchanger.sh | bash

Bu yüklemek için bir kök şifre soracaktır locationchangeriçin /usr/local/bindizine.

Bu kadar!

Bundan sonra , adı mevcut WiFi ağının adıyla (SSID) aynı olan bir ağ konumu varsa, otomatik olarak ağ konumuna geçer. Aksi takdirde, Otomatik konuma geçer. (BTW, Otomatik adında bir konum yoksa , günlüklerde ve çıkışlarda şikayet eder.)

Konuma özgü komut dosyası

Belirli bir WiFi ağına her bağlandığınızda bir komut dosyası çalıştırmak istiyorsanız, bu komut dosyalarını girin ~/.locationsve WiFi ağlarından sonra adlandırın, örneğin ~/.locations/Corp Wi-Fi:

#!/usr/bin/env bash

# Require password immediately after sleep or screen saver begins
osascript -e 'tell application "System Events" to set require password to wake of security preferences to true'

Ayrıca ~/.locations/Automatic, diğer konumlardaki bu değişiklikleri sıfırlayacak oluşturmak da isteyebilirsiniz :

#!/usr/bin/env bash

# Don’t require password immediately after sleep or screen saver begins
osascript -e 'tell application "System Events" to set require password to wake of security preferences to false'

Komut dosyalarında ( chmod +x) yürütme bitleri kullandığınızdan emin olun .

Konum takma adları

Bir ağ konumunu birden fazla WiFi ağı arasında paylaşabilirsiniz. Örneğin, aynı anda 2,4 ve 5 GHz bantlarında yayın yapan kablosuz bir yönlendiriciniz varsa, bir yapılandırma dosyası oluşturabilir ~/.locations/locations.confve içine basit anahtar / değer çiftleri koyabilirsiniz:

Home_WiFi_5GHz=Home_WiFi

Burada anahtarlar WiFi ağ adlarıdır ve değerler karşılık gelen ağ konumlarıdır . Onlara çıplak eşit işaretlerle ( =boşluk bırakmadan) katılın . Yukarıdaki örnekte, Home_WiFi_5GHz WiFi ağı bağlıysa, Home_WiFi ağ konumuna geçecektir .

Konum takma adlarının aynı ad kuralına göre öncelikli olduğuna dikkat edin. Yukarıdaki örnekte, Home_WiFi_5GHz~/.locations/Home_WiFi WiFi ağına bağlandığınızda yalnızca komut dosyası çalışacaktır .

Konum takma adlarıyla, WiFi ağlarının adlarını eşleştirmek için ekstra ağ konumları oluşturmanız bile gerekmez.

Sorun giderme

Kapsamlı günlükleri aşağıdaki komutla görüntüleyebilirsiniz:

$ tail -f ~/Library/Logs/LocationChanger.log

Örnek çıktı:

[2017-10-13 11:35] Connected to 'Unknown WiFi'
[2017-10-13 11:35] Location 'Unknown WiFi' was not found. Will default to 'Automatic'
[2017-10-13 11:35] Changing the location to 'Automatic'
CurrentSet updated to 6B593A12-C51B-3FF1-DE1D-87310F232147 (Automatic)
[2017-10-13 11:37] Connected to 'Home_WiFi_5GHz'
[2017-10-13 11:37] Will switch the location to 'Home_WiFi' (configuration file)
[2017-10-13 11:37] Changing the location to 'Home_WiFi'
CurrentSet updated to 7900D1E6-3820-50C6-882E-4F5K2BEF32ED (Home_WiFi)

kaldırma

İlk olarak, başlatma aracısını kaldırın:

launchctl unload ~/Library/LaunchAgents/LocationChanger.plist

Sonra, ikili, plist ve günlük dosyasını kaldırın:

rm ~/Library/LaunchAgents/LocationChanger.plist
rm ~/Library/Logs/LocationChanger.log
sudo rm /usr/local/bin/locationchanger

Ayrıca içindeki yapılandırma dosyalarını ve konuma özgü komut dosyalarını kaldırabilirsiniz ~/.locations:

rm -rf ~/.locations
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.