Mac OS X автоматично змінює конфігурацію IP за місцем розташування (через мережу Wifi)?


10

Чи можна налаштувати Mac OS X для автоматичного налаштування інтерфейсу аеропорту зі статичною IP-адресою при підключенні до мережі Wi-Fi з певним іменем, а в усіх інших мережах Wi-Fi використовувати DHCP?

В даний час я використовую функцію "Місцеположення" в розділі "Мережа" в Налаштуваннях системи для вручну перемикатися між двома налаштуваннями IP-адрес. У мене налаштування "мій статичний IP" і налаштування "DHCP" за замовчуванням. Однак для цього потрібно ввести Системні налаштування, щоб змінювати спадне місце розташування кожного разу при переключенні місць розташування. Чи можна це автоматизувати?

Переважно це можна зробити без стороннього програмного забезпечення.

Відповіді:


8

Це не те, що можна зробити просто через ОС.

Вищезгадані місцеположення є одним із варіантів, поряд із безкоштовним розташуванням аеропорту або MarcoPolo або платним мережевим розташуванням. Існує також AppleScript під назвою WiFiScriptor, який може допомогти.

Однак! вам не потрібно заходити в системні налаштування -> Мережа -> [Розташування місця]. Ви можете пройти через меню Apple -> Місце розташування (приблизно 6 варіантів вниз) -> [виберіть потрібне місце]


1
Дякуємо за пораду щодо переключення місць з меню Apple. Незважаючи на те, що все ще вручну, це відчуває себе хоча б трохи краще, ніж переходити до системних налаштувань у кілька кроків.
Маркус Холлманн

Також дякую, що підтвердили, що неможливо (на даний момент) це зробити без стороннього програмного забезпечення.
Маркус Холлманн

Здається, посилання на місцезнаходження аеропорту зараз вказує на веб-сайт зі спамом
Nat

9

Можна обійтися і без будь-якої сторони, дивіться https://github.com/rimar/wifi-location-changer


2
Я хотів би лише додати, що для того, щоб це працювало, назва вашого місцезнаходження має бути таким самим, як і SSID мережі Wi-Fi. Логіка сценарію полягає в тому, що він перевіряє місцеположення з назвою, подібним до SSID, і перемикається на це. Якщо з цим іменем немає Місцеположення, воно за замовчуванням встановлюється для автоматичного / автоматичного.
Ристраум

Крім того, мені довелося вийти з системи та увійти ще до того, як він почав працювати над Yosemite.
djule5

1

Стороннє, невільне рішення, яке, ймовірно, допоможе вам, - це Locations .

Як пропонує ця відповідь на подібне, але не тотожне запитання про stackoverflow, ви можете створити сценарій, який працює через регулярний інтервал. launchdзапобігає його запуску не один раз.

Псуедокод:

  • отримати збережене значення_файлу з файлу
  • встановити current_wifi на вихід networksetup -getairportnetwork AirPort
  • якщо збережений_wifi == current_wifi, вийдіть
  • інакше запустіть, networksetup -switchtolocation {location}де {location} - назва місцезнаходження, на яке ви хочете перейти, залежно від знайденої мережі Wi-Fi.

Тут може виникнути ситуація з куркою і яйцями при підключенні до локального Wi-Fi, який не надає DHCP-адресу, поки ви налаштовані очікувати адресу від DHCP.

-

Оновлення: знайдено можливий дублікат питання, який пропонує рішення з відкритим кодом: MarcoPolo


1

Оскільки дана відповідь є вручну, ось простий скрипт, який автоматично її змінює:

Створіть різні розташування в системних налаштуваннях> Мережа, щоб відобразити кожну вашу мережу Wi-Fi.

Сценарій: ( /usr/bin/autolocation.sh) Помістіть це в потрібному місці та змініть значення SSID у сценарії відповідно до вашого сценарію.

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

Цей скрипт змінить мережеве розташування (налаштування) на основі SSID бездротової мережі. Тепер це потрібно запускати, коли є зміна налаштувань мережі. Ми створимо запуск агента для того ж.

пусковий список: ( ~/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/LaunchAgents(всередині домашнього режиму), оскільки я єдиний користувач, який використовує цю машину. Якщо ви хочете, щоб він був глобальним, поставте його /Library/LaunchAgents.

Цей файл повинен бути власником rootі мати 600дозволи:

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

Після виходу з системи / входу в систему або перезавантаження системи запускаючий агент почне працювати в залежності від того, куди ви ввели файл (ваш домашній dir або глобальний). Але якщо ви цього не хочете робити і хочете завантажити зараз, виконайте наступне в командному рядку. Ви повинні це зробити лише один раз.

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

Це воно. Тепер IP вашого Mac зміниться автоматично.

Примітка: Працює і на El Capitan!


1

Представляємо Changer Changer

Ось дуже перспективний сценарій зміни мережевих локацій на основі WiFi SSID:

Його створив Антон Єпрев . Ви можете переглянути код та більш детальну документацію на GitHub:

Установка

Він встановлюється за допомогою командного рядка:

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

Він попросить вас встановити кореневий пароль, який слід встановити locationchangerв /usr/local/binкаталог.

Це воно!

Після цього, якщо є мережеве розташування , ім'я якого тотожне імені (SSID) поточної мережі WiFi , воно автоматично переключиться на мережеве місцеположення. В іншому випадку він перейде в автоматичне розташування. (BTW, якщо немає місцезнаходження, яке називається Автоматичне , воно скаржиться в журнали та виходи.)

Сценарій, що визначається місцеположенням

Якщо ви хочете запускати сценарій кожного разу, коли ви підключаєтесь до певної мережі Wi-Fi, тоді вводите ці сценарії ~/.locationsта називайте їх за WiFi-мережами, наприклад ~/.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'

І, можливо, ви захочете створити, ~/.locations/Automaticщо скине ці зміни в інших місцях:

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

Переконайтесь, що викидаєте біти виконання на script ( chmod +x).

Псевдоніми місцеположення

Ви можете поділитись мережевим розташуванням між кількома мережами WiFi. Наприклад, якщо у вас є бездротовий маршрутизатор, який транслює в діапазонах 2,4 і 5 ГГц одночасно, ви можете створити файл конфігурації ~/.locations/locations.confі помістити прості пари ключ-значення всередині:

Home_WiFi_5GHz=Home_WiFi

Тут клавіші - імена мережі WiFi , а значення - відповідні локальні мережі . Приєднуйтесь до них з голими рівними знаками ( =без пробілів). У наведеному вище прикладі, якщо підключена мережа WiFi Home_WiFi_5GHz , вона переключиться на мережеве розташування Home_WiFi .

Зауважте, що псевдоніми місцеположення мають пріоритет над однойменним правилом. У наведеному вище прикладі, тільки ~/.locations/Home_WiFiпідключення до запуску WiFi мережі Home_WiFi_5GHz .

З псевдонімами розташування вам навіть не потрібно створювати додаткові мережеві місця для відповідності назв мереж WiFi.

Вирішення проблем

Ви можете переглянути великі журнали за допомогою наступної команди:

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

Вибірка зразка:

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

Видалення

Спочатку вивантажте запуск:

launchctl unload ~/Library/LaunchAgents/LocationChanger.plist

Потім видаліть файл двійкового файлу, списку та журналу:

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

Ви також можете видалити файли конфігурації та спеціальні сценарії всередині ~/.locations:

rm -rf ~/.locations
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.