web-dev-qa-db-ja.com

Mac OS Xは場所によって(Wifiネットワークによって)IP構成を自動的に変更しますか?

Mac OS Xは、特定の名前のWifiネットワークに接続し、他のすべてのWifiネットワークでDHCPを使用する場合、静的IPアドレスを使用してAirportインターフェイスを自動的に構成するように設定できますか?

現在、システム環境設定の「ネットワーク」セクションの「場所」機能を使用して、2つのIPアドレス設定を手動で切り替えています。 「静的IP」設定とデフォルトの「DHCP」設定があります。ただし、これには、システム環境設定を入力して、場所を切り替えるたびに[場所]ドロップダウンを変更する必要があります。これは自動化できますか?

できれば、これはサードパーティのソフトウェアなしで実行されます。

10
Markus Hallmann

これは、OSを介して簡単に実行できるものではありません。

前述の場所は、フリーウェア 空港の場所 またはMarcoPoloまたは有料のネットワークの場所とともに1つのオプションです。役立つ可能性のあるWiFiScriptorと呼ばれるAppleScriptもあります。

ただし!システム環境設定->ネットワーク-> [場所のドロップダウン]。 アップルメニュー->場所(約6つのオプションがあります)-> [目的の場所を選択]を通過できます

-b

8
supreme_b_ing

サードパーティなしで実行することは可能です。 https://github.com/rimar/wifi-location-changer を参照してください。

9
Yuval Rimar

おそらくあなたのために働くであろうサードパーティの非無料の解決策は 場所 です。

この回答 がスタックオーバーフローに関する類似しているが同一ではない質問に示唆しているように、一定の間隔で実行されるスクリプトを作成できます。 launchdは、複数回実行されないようにします。

擬似コード:

  • ファイルからsaved_wifi値を取得します
  • current_wifiをnetworksetup -getairportnetwork AirPortの出力に設定します
  • saved_wifi == current_wifiの場合、終了します
  • それ以外の場合は、networksetup -switchtolocation {location}を実行します。ここで、{location}は、見つかったWi-Fiネットワークに基づいて切り替える場所の名前です。

DHCPからのアドレスを期待するように構成されているときに、DHCPアドレスを提供しないローカルwifiに接続すると、鶏が先か卵が先かという状況が発生する可能性があります。

-

更新:可能性が見つかりました 重複した質問 これはオープンソースソリューションを示唆しています: MarcoPolo

1
Doug Harris

与えられた答えは手動なので、これは自動的にそれを変更する簡単なスクリプトです:

各WiFiネットワークを反映するために、[システム環境設定]> [ネットワーク]でさまざまな場所を作成します。

スクリプト:(/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に基づいてネットワークの場所(設定)を変更します。これで、ネットワーク設定に変更があるたびにこれを実行する必要があります。同じことを行うために、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>

このマシンを使用しているのは私だけなので、このファイルを~/Library/LaunchAgents(ホームディレクトリ内)に作成しました。グローバルにしたい場合は、/Library/LaunchAgentsに入れてください。

このファイルはrootが所有し、600権限を持っている必要があります。

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

ログアウト/ログインするか、システムを再起動すると、ファイルを配置した場所(ホームディレクトリまたはグローバル)に応じて、起動エージェントが起動します。ただし、これを実行せずに今すぐロードする場合は、コマンドラインで次のコマンドを実行します。あなたは一度だけそれをする必要があります。

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

それでおしまい。これで、MacのIPが自動的に変更されます。

注:エルキャピタンでも動作します!

1
Vij Vijay

ロケーションチェンジャーのご紹介

WiFiSSIDに基づいてネットワークの場所を変更するための非常に有望なスクリプトを次に示します。

Anton Eprev によって作成されます。コードと詳細なドキュメントはGitHubで確認できます。

Installation

コマンドラインからインストールします。

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

locationchanger/usr/local/binディレクトリにインストールするためのrootパスワードの入力を求められます。

それでおしまい!

その後、ネットワークの場所がある場合名前が現在のWiFiネットワークの名前(SSID)と同じである、ネットワークの場所に自動的に切り替わります。それ以外の場合は、自動の場所に切り替わります。 (ところで、Automaticという場所がない場合は、ログに文句を言って終了します。)

場所固有のスクリプト

特定のWiFiネットワークに接続するたびにスクリプトを実行する場合は、それらのスクリプトを~/.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'

必ずスクリプトに実行ビットをキャストしてください(chmod +x)。

ロケーションエイリアス

複数のWiFiネットワーク間でネットワークの場所を共有できます。たとえば、2.4GHz帯域と5GHz帯域で同時にブロードキャストするワイヤレスルーターがある場合は、構成ファイル~/.locations/locations.confを作成し、その中に単純なキーと値のペアを配置できます。

Home_WiFi_5GHz=Home_WiFi

ここでキーはWiFiネットワーク名値は対応するネットワークの場所です。裸の等号(=、スペースなし)でそれらを結合します。上記の例では、WiFiネットワークHome_WiFi_5GHzが接続されている場合、ネットワークの場所Home_WiFiに切り替わります。

ロケーションエイリアスは同じ名前のルールよりも優先されることに注意してください。上記の例では、WiFiネットワークHome_WiFi_5GHzに接続すると、スクリプト~/.locations/Home_WiFiのみが実行されます。

ロケーションエイリアスを使用すると、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

次に、バイナリ、plist、およびログファイルを削除します。

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

~/.locations内の構成ファイルと場所固有のスクリプトを削除することもできます。

rm -rf ~/.locations
1
Rockallite