Bagaimana cara mengganti pengaturan DNS secara otomatis saat terhubung ke WiFi yang berbeda?

Aug 17 2020

Saya memiliki pengaturan DNS yang sangat berbeda ketika saya sedang bekerja dan ketika saya di rumah. Saya bertanya-tanya apakah saya dapat mengubah pengaturan DNS MacBook Pro saya secara otomatis ketika saya terhubung ke WiFi yang berbeda.

Saya melakukan banyak pencarian, saya membuat Lokasi khusus yang disebut Rumah di pengaturan jaringan. Dan saya mengatur pengaturan DNS Rumah saya di bawah profil ini. Dan profil default yang disebut Otomatis Saya membiarkan komputer secara otomatis mendapatkan pengaturan DNS.

Setelah itu, saya dapat mengubah pengaturan DNS saya melalui:

networksetup -switchtolocation Home

Itu sangat dekat dengan permintaan saya. Tapi saya harap saya dapat menemukan cara yang lebih cerdas, Jika saya menemukan metode Jika saya terhubung ke WiFi yang disebut "Rumah", dan kemudian menjalankan perintah secara otomatis, Ini akan menjadi luar biasa.

Pembaruan 20200819

Saya menemukan alat otomatisasi yang disebut Hammerspoon , jadi saya dapat menetapkan pintasan untuk beralih Lokasi yang berbeda menggunakan perintah.

Meskipun saya tidak menemukan cara langsung, tetapi Hammerspoon sangat bagus dan kuat. Saya mencoba menonton perubahan Wifi menggunakan Hammerspoon, tetapi tetap ada masalah kecil, jadi saya membuka masalah di sini

Jawaban

4 TJLuoma Aug 17 2020 at 23:44

Keyboard Maestro dapat melakukan ini dengan sangat mudah:

Atur SSID dan Lokasi yang Anda inginkan, dan itu akan melakukan apa yang Anda inginkan.

3 user3439894 Aug 19 2020 at 01:06

Anda tidak perlu menggunakan aplikasi pihak ketiga untuk mencapai tujuan Anda.

Ketika Wi-Fi terhubung ke jaringan , file berikut ini , antara lain, diubah:

/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist

Anda dapat menggunakan Agen Peluncuran Pengguna dengan kunci WatchPaths untuk mengetahui kapan file target diubah dan menjalankan skrip Anda sesuai dengan itu.

Berikut ini adalah contoh bagaimana untuk mencapai tujuan dan menggunakan Skynet sebagai SSID dari Wi-Fi jaringan .

Menggunakan networksetupuntuk mendapatkan arus Wi-Fi jaringan , berikut contoh shell script kode digunakan dan disimpan sebagai misalnya /usr/local/bin/detect-wifi-change:

#!/bin/bash

[[ $(networksetup -getairportnetwork en0) == "Current Wi-Fi Network: SkyNet" ]] && say "connected to skynet"

Dalam kode contoh di atas, ketika Wi-Fi terhubung ke SkyNet, ia hanya mengatakan "terhubung ke skynet", dan Anda akan mengganti SkyNet di $(...)bagian perintah dengan SSID target Anda , dan mengganti say "connected to skynet" perintah dengan networksetup -switchtolocation Home perintah seperti yang ditunjukkan di pertanyaanmu.

Untuk Agen Launch , di Perpustakaan dari Anda Rumah folder Anda akan menggunakan contoh berikut, disimpan sebagai, misalnya, ~/Library/LaunchAgents/com.my.detect.wifi.change.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>Label</key>
        <string>com.my.detect.wifi.change</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/sh</string>
        <string>/usr/local/bin/detect-wifi-change</string>
    </array>
    <key>WatchPaths</key>
    <array>
        <string>/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist</string>
    </array>
</dict>
</plist>

Setelah menyimpan file PLIST , gunakan untuk itu, misalnya:launchctlload

launchctl load ~/Library/LaunchAgents/com.my.detect.wifi.change.plist

Catatan: Anda dapat menggunakan unload kata kerja dengan launchctluntuk membongkar file PLIST target .

Sekarang setiap kali Wi-Fi terhubung ke SSID yang berbeda , misalnya /usr/local/bin/detect-wifi-changedijalankan dan jika terhubung ke SSID target , perintah setelah &&dijalankan.


Catatan: Contoh di atas telah diuji dan bekerja di bawah macOS High Sierra menggunakan SSID saya yang sebenarnya sebagai pengganti SkyNet di kedua tempat di skrip .


 

Dokumentasi Terkait:

Di Terminal , gantikan commandsalah satu dari berikut ini:

  • launchd
  • launchd.plist
  • launchctl

Anda dapat membaca halaman manual untuk command di Terminal dengan mengetik commanddan kemudian klik kanan padanya dan pilih: Buka Halaman manual

Lihat juga: