Mac OS X은 Wi-Fi 네트워크를 통해 위치에 따라 IP 구성을 자동으로 변경합니까?


10

특정 이름의 Wi-Fi 네트워크에 연결되어 있고 다른 모든 Wi-Fi 네트워크에서 DHCP를 사용하는 경우 고정 IP 주소로 공항 인터페이스를 자동으로 구성하도록 Mac OS X을 설정할 수 있습니까?

현재 시스템 환경 설정에서 "네트워크"섹션의 "위치"기능을 사용하여 두 IP 주소 설정을 수동으로 전환하고 있습니다. "정적 IP"설정과 기본 "DHCP"설정이 있습니다. 그러나 위치를 전환 할 때마다 위치 드롭 다운을 변경하려면 시스템 환경 설정을 입력해야합니다. 이것을 자동화 할 수 있습니까?

바람직하게 이것은 타사 소프트웨어없이 수행됩니다.

답변:


8

이것은 단순히 OS를 통해 수행 할 수있는 것이 아닙니다.

위에서 언급 한 위치는 프리웨어 공항 위치 또는 MarcoPolo 또는 유료 네트워크 위치 와 함께 하나의 옵션 입니다. WiFiScriptor라는 AppleScript도 있습니다.

하나! 시스템 환경 설정 -> 네트워크 -> [위치 드롭 다운] 으로 이동할 필요는 없습니다 . 당신은을 통해 갈 수있는 애플 메뉴 -> 위치 (6에 대한 옵션 아래) -> [당신이 원하는 위치를 선택]

-비


1
Apple 메뉴에서 위치를 전환하는 방법에 대한 팁을 주셔서 감사합니다. 여전히 수동이지만, 여러 단계를 거쳐 시스템 환경 설정으로 들어가는 것보다 조금 더 좋습니다.
Markus Hallmann

또한 타사 소프트웨어 없이는 (현재) 불가능하다는 것을 확인해 주셔서 감사합니다.
Markus Hallmann

공항 위치 링크가 스팸 웹 사이트를 가리키는 것 같습니다
Nat

9

타사없이 할 수 있습니다 ( https://github.com/rimar/wifi-location-changer 참조)


2
이 기능을 사용하려면 위치 이름이 wifi 네트워크의 SSID와 같아야한다고 추가하고 싶습니다. 스크립트의 논리는 SSID와 유사한 이름으로 위치를 확인하고 해당 위치로 전환한다는 것입니다. 해당 이름의 위치가 없으면 기본값은 자동 / 자동입니다.
Rystraum

또한 요세미티에서 작업을 시작하기 전에 로그 아웃했다가 다시 로그인해야했습니다.
djule5

1

아마도 귀하에게 도움이되는 타사의 무료 솔루션이 Locations 입니다.

stackoverflow에 대해 비슷하지만 동일하지 않은 질문에 대한 이 답변 에서 제안한 것처럼 정기적으로 실행되는 스크립트를 만들 수 있습니다. launchd두 번 이상 실행되지 않습니다.

슈도 코드 :

  • 파일에서 saved_wifi 값을 얻습니다
  • current_wifi를 출력으로 설정 networksetup -getairportnetwork AirPort
  • saved_wifi == current_wifi이면 종료
  • else networksetup -switchtolocation {location}{where}는 찾은 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를 기반으로 네트워크 위치 (설정)를 변경합니다. 이제 네트워크 설정이 변경 될 때마다 실행해야합니다. 시작된 에이전트를 만들어 동일한 작업을 수행합니다.

시작 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

그것은 설치 루트 암호를 묻습니다 locationchanger/usr/local/bin디렉토리.

그게 다야!

그런 다음 이름이 현재 WiFi 네트워크의 이름 (SSID)과 동일한 네트워크 위치가 있으면 네트워크 위치 자동 전환됩니다. 그렇지 않으면 자동 위치로 전환됩니다 . (BTW, Automatic 이라는 위치가 없으면 로그에 불평하고 종료됩니다.)

위치 별 스크립트

특정 WiFi 네트워크에 연결할 때마다 스크립트를 실행하려면 해당 스크립트를 넣고 ~/.locationsWiFi 네트워크 뒤에 이름을 지정하십시오 (예 ~/.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_WiFiWiFi 네트워크 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.