Mac OS Xは(Wifiネットワークによって)ロケーションごとにIP構成を自動的に変更しますか?


10

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

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

好ましくは、これはサードパーティのソフトウェアなしで行われます。

回答:


8

これはOSだけでできることではありません。

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

しかしながら!システム環境設定 -> ネットワーク -> [ロケーションドロップダウン]に移動する必要はありません。アップルメニュー -> 場所(約6つのオプションを下に移動)-> [目的の場所を選択]からアクセスできます。

-b


1
アップルメニューからの場所の切り替えに関するヒントをありがとう。まだ手動ですが、複数のステップでシステム環境設定に入るよりも少なくとも少しは良いと感じます。
Markus Hallmann、2011年

また、サードパーティ製のソフトウェアなしでは(現在のところ)実行できないことを確認していただきありがとうございます。
Markus Hallmann

Airport LocationリンクはスパムWebサイトを指しているようです
Nat

9

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


2
これを機能させるために追加したいのですが、ロケーション名はWi-FiネットワークのSSIDと同じである必要があります。スクリプトのロジックは、SSIDに類似した名前の場所をチェックし、それに切り替えます。その名前の場所がない場合、デフォルトでauto / Automaticになります。
Rystraum 2014年

また、Yosemiteの作業を開始する前に、ログアウトして再度ログインする必要がありました。
djule5 2015

1

おそらくあなたのために機能するサードパーティの非フリーのソリューションはLocationsです。

Stackoverflowに関する類似した、ただし同一ではない質問に対するこの回答で示唆されているように、定期的に実行されるスクリプトを作成できます。launchd複数回実行されるのを防ぎます。

擬似コード:

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

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

-

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


1

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

[システム設定]> [ネットワーク]でさまざまな場所を作成して、各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エージェントを作成します。

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が自動的に変更されます。

注:El Capitanでも動作します!


1

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

以下は、WiFi SSIDに基づいてネットワークの場所を変更するための非常に有望なスクリプトです。

Anton Eprevによって作成されました。GitHubでコードと詳細なドキュメントを表示できます。

取り付け

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

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

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

それでおしまい!

その後、現在のWiFiネットワークの名前(SSID)と同じ名前のネットワークロケーションがある場合、ネットワークロケーションに自動的に切り替わります。それ以外の場合は、自動ロケーションに切り替わります。(ところで、自動という場所がない場合、ログにエラーが表示されて終了します。)

場所固有のスクリプト

特定の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.4および5GHz帯域で同時にブロードキャストするワイヤレスルーターがある場合、構成ファイル~/.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

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

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

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

rm -rf ~/.locations
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.