Mac OS X mengubah konfigurasi IP secara otomatis berdasarkan lokasi (dengan jaringan Wifi)?

10

Dapatkah Mac OS X diatur untuk secara otomatis mengkonfigurasi antarmuka Airport-nya dengan alamat IP statis ketika terhubung ke jaringan Wifi dengan nama tertentu, dan pada semua jaringan Wifi lainnya menggunakan DHCP?

Saat ini saya menggunakan fitur "Lokasi" pada bagian "Jaringan" di System Preferences untuk secara manual beralih di antara dua pengaturan alamat IP. Saya memiliki pengaturan "IP statis saya", dan pengaturan "DHCP" default. Namun ini memerlukan memasuki System Preferences untuk mengubah drop-down Lokasi setiap kali saat berpindah lokasi. Bisakah ini otomatis?

Lebih disukai ini akan dilakukan tanpa perangkat lunak pihak ketiga.

Markus Hallmann
sumber

Jawaban:

8

Ini bukan sesuatu yang bisa dilakukan hanya melalui OS.

Lokasi yang disebutkan di atas adalah salah satu opsi, bersama dengan Lokasi Bandara freeware atau MarcoPolo atau Lokasi Jaringan berbayar. Ada juga AppleScript yang disebut WiFiScriptor yang bisa membantu.

Namun! Anda tidak perlu masuk ke System Preferences -> Network -> [Dropdown Lokasi]. Anda dapat melalui Menu Apple -> Lokasi (sekitar 6 opsi ke bawah) -> [pilih lokasi yang Anda inginkan]

-b

supreme_b_ing
sumber
1
Terima kasih atas tip tentang berpindah lokasi dari Menu Apple. Meskipun masih manual, rasanya setidaknya sedikit lebih baik daripada masuk ke System Preferences dengan beberapa langkah.
Markus Hallmann
Juga terima kasih karena mengonfirmasi bahwa saat ini tidak mungkin melakukannya tanpa perangkat lunak pihak ketiga.
Markus Hallmann
tautan Lokasi Bandara tampaknya mengarah ke situs web spam sekarang
Nat
9

Dimungkinkan untuk melakukannya tanpa pihak ketiga, lihat https://github.com/rimar/wifi-location-changer

Yuval Rimar
sumber
2
Saya hanya ingin menambahkan bahwa agar ini berfungsi, nama Lokasi Anda harus sama dengan SSID dari jaringan wifi. Logika skrip adalah bahwa ia memeriksa Lokasi dengan nama yang mirip dengan SSID dan beralih ke situ. Jika tidak ada Lokasi dengan nama itu, defaultnya adalah otomatis / Otomatis.
Rystraum
Juga, saya harus keluar dan masuk sebelum mulai bekerja pada Yosemite.
djule5
1

Solusi pihak ketiga, tidak bebas yang mungkin akan bekerja untuk Anda adalah Lokasi .

Seperti yang disarankan oleh jawaban ini untuk pertanyaan yang serupa, tetapi tidak identik, tentang stackoverflow, Anda dapat membuat skrip yang berjalan pada interval reguler. launchdakan mencegahnya berjalan lebih dari sekali.

Psuedocode:

  • dapatkan nilai save_wifi dari file
  • set current_wifi ke output dari networksetup -getairportnetwork AirPort
  • jika Saved_wifi == current_wifi, keluar
  • lain jalankan di networksetup -switchtolocation {location}mana {location} adalah nama lokasi yang ingin Anda alihkan berdasarkan jaringan wifi yang ditemukan.

Mungkin ada situasi ayam dan telur di sini dengan menghubungkan ke wifi lokal yang tidak memberikan alamat DHCP saat Anda dikonfigurasi untuk mengharapkan alamat dari DHCP.

-

Perbarui: temukan kemungkinan pertanyaan rangkap yang menyarankan solusi opensource: MarcoPolo

Doug Harris
sumber
1

Karena jawaban yang diberikan adalah manual, berikut ini adalah skrip sederhana yang mengubahnya secara otomatis:

Buat berbagai lokasi di System Preferences> Network untuk mencerminkan setiap jaringan WiFi Anda.

Skrip: ( /usr/bin/autolocation.sh) Letakkan ini di beberapa lokasi yang Anda inginkan dan ubah nilai SSID dalam skrip sesuai dengan skenario Anda.

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

Script ini akan mengubah lokasi jaringan (pengaturan) berdasarkan SSID dari jaringan nirkabel. Sekarang, ini harus dijalankan setiap kali ada perubahan dalam pengaturan jaringan. Kami akan membuat agen launchd untuk melakukan hal yang sama.

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

Saya membuat file ini di ~/Library/LaunchAgents(di dalam dir home saya) karena saya satu-satunya pengguna yang menggunakan mesin ini. Jika Anda ingin menjadi global, masukkan /Library/LaunchAgents.

File ini harus dimiliki oleh rootdan memiliki 600izin:

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

Setelah Anda keluar / masuk atau reboot sistem, agen peluncuran akan mulai bekerja tergantung pada tempat Anda meletakkan file (direktori home atau global Anda). Tetapi jika Anda tidak ingin melakukan itu dan ingin memuat sekarang, jalankan yang berikut di baris perintah. Anda harus melakukannya hanya sekali.

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

Itu dia. Sekarang IP Mac Anda akan berubah secara otomatis.

Catatan: Bekerja di El Capitan juga!

Vij Vijay
sumber
1

Memperkenalkan Pengubah Lokasi

Berikut ini skrip yang sangat menjanjikan untuk mengubah lokasi jaringan berdasarkan WiFi SSID:

Ini dibuat oleh Anton Eprev . Anda dapat melihat kode dan dokumentasi yang lebih rinci di GitHub:

Instalasi

Itu menginstal melalui baris perintah:

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

Ini akan meminta Anda untuk kata sandi root untuk menginstal locationchangerke /usr/local/bindirektori.

Itu dia!

Setelah itu, jika ada lokasi jaringan yang namanya identik dengan nama (SSID) dari jaringan WiFi saat ini , itu akan secara otomatis beralih ke lokasi jaringan. Kalau tidak, itu akan beralih ke lokasi Otomatis . (BTW, jika tidak ada lokasi yang disebut Otomatis , ia mengeluh dalam log dan keluar.)

Skrip khusus lokasi

Jika Anda ingin menjalankan skrip setiap kali terhubung ke jaringan WiFi tertentu, masukkan skrip tersebut ~/.locationsdan beri nama setelah jaringan WiFi, misalnya ~/.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'

Dan Anda mungkin ingin membuat ~/.locations/Automaticyang akan mengatur ulang perubahan di lokasi lain:

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

Pastikan untuk memberikan bit eksekusi pada skrip ( chmod +x).

Alias ​​lokasi

Anda dapat berbagi lokasi jaringan antara beberapa jaringan WiFi. Misalnya, jika Anda memiliki router nirkabel yang mengudara pada band 2.4 dan 5GHz secara bersamaan, Anda dapat membuat file konfigurasi ~/.locations/locations.confdan memasukkan pasangan nilai kunci sederhana di dalam:

Home_WiFi_5GHz=Home_WiFi

Di sini kunci adalah nama jaringan WiFi , dan nilainya adalah lokasi jaringan yang sesuai . Bergabunglah dengan mereka dengan tanda sama dengan ( =tanpa spasi). Dalam contoh di atas, jika jaringan WiFi Home_WiFi_5GHz tersambung, itu akan beralih ke lokasi jaringan Home_WiFi .

Perhatikan bahwa alias lokasi mengambil prioritas di atas aturan nama yang sama. Dalam contoh di atas, hanya skrip yang ~/.locations/Home_WiFiakan berjalan ketika Anda terhubung ke jaringan WiFi Home_WiFi_5GHz .

Dengan alias lokasi, Anda bahkan tidak perlu membuat lokasi jaringan tambahan untuk mencocokkan nama jaringan WiFi.

Penyelesaian masalah

Anda dapat melihat log yang luas dengan perintah berikut:

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

Output sampel:

[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)

Penghapusan Instalasi

Pertama, bongkar agen peluncuran:

launchctl unload ~/Library/LaunchAgents/LocationChanger.plist

Kemudian, hapus file biner, plist dan log:

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

Anda juga dapat menghapus file konfigurasi dan skrip khusus lokasi di dalam ~/.locations:

rm -rf ~/.locations
Rockallite
sumber