Mac OS X tự động thay đổi cấu hình IP theo vị trí (bằng mạng Wifi)?


10

Mac OS X có thể được thiết lập để tự động định cấu hình giao diện Sân bay với địa chỉ IP tĩnh khi được kết nối với mạng Wifi với một tên nhất định và trên tất cả các mạng Wifi khác có sử dụng DHCP không?

Hiện tại tôi đang sử dụng tính năng "Vị trí" của phần "Mạng" trong Tùy chọn hệ thống để chuyển đổi thủ công giữa hai thiết lập địa chỉ IP. Tôi có thiết lập "IP tĩnh" của tôi và cài đặt "DHCP" mặc định. Tuy nhiên, điều này yêu cầu nhập Tùy chọn hệ thống để thay đổi thả xuống Vị trí mỗi lần khi chuyển vị trí. Điều này có thể được tự động?

Tốt nhất là điều này sẽ được thực hiện mà không cần phần mềm của bên thứ ba.

Câu trả lời:


8

Đây không phải là điều có thể được thực hiện đơn giản thông qua HĐH.

Các Địa điểm nói trên là một tùy chọn, cùng với Vị trí sân bay phần mềm miễn phí hoặc MarcoPolo hoặc Vị trí mạng trả phí. Ngoài ra còn có một AppleScript được gọi là WiFiScriptor có thể giúp đỡ.

Tuy nhiên! bạn không cần phải vào Tùy chọn hệ thống -> Mạng -> [thả xuống vị trí]. Bạn có thể đi qua Menu Apple -> Vị trí (khoảng 6 tùy chọn trở xuống) -> [chọn vị trí bạn muốn]

-b


1
Cảm ơn các mẹo về chuyển đổi vị trí từ Menu Apple. Mặc dù vẫn thủ công nhưng điều đó cảm thấy tốt hơn ít nhất một chút so với đi vào Tùy chọn hệ thống với nhiều bước.
Markus Hallmann

Cũng cảm ơn vì đã xác nhận rằng hiện tại không thể thực hiện được nếu không có phần mềm của bên thứ ba.
Markus Hallmann

liên kết Vị trí sân bay dường như trỏ đến một trang web spam ngay bây giờ
Nat

9

Có thể thực hiện mà không cần bất kỳ bên thứ ba nào, xem https://github.com/rimar/wifi-location-changer


2
Tôi chỉ muốn nói thêm rằng để điều này hoạt động, tên Vị trí của bạn phải giống với SSID của mạng wifi. Logic của tập lệnh là nó kiểm tra Vị trí có tên tương tự SSID và chuyển sang vị trí đó. Nếu không có Vị trí có tên đó, nó sẽ mặc định là tự động / Tự động.
Rystraum

Ngoài ra, tôi đã phải đăng xuất và đăng nhập lại trước khi nó bắt đầu hoạt động trên Yosemite.
djule5

1

Một giải pháp không dành cho bên thứ ba, có thể phù hợp với bạn là Địa điểm .

Như được đề xuất bởi câu trả lời này cho một câu hỏi tương tự, nhưng không giống hệt nhau trên stackoverflow, bạn có thể tạo một tập lệnh chạy ở một khoảng thời gian thông thường. launchdsẽ ngăn nó chạy nhiều lần.

Mã hóa:

  • nhận giá trị save_wifi từ một tệp
  • đặt current_wifi thành đầu ra của networksetup -getairportnetwork AirPort
  • nếu được lưu_wifi == current_wifi, hãy thoát
  • khác chạy networksetup -switchtolocation {location}trong đó {location} là tên của vị trí bạn muốn chuyển sang dựa trên mạng wifi được tìm thấy.

Có thể có một tình huống gà và trứng ở đây với việc kết nối với wifi cục bộ không cung cấp địa chỉ DHCP trong khi bạn được định cấu hình để mong đợi một địa chỉ từ DHCP.

-

Cập nhật: tìm thấy câu hỏi trùng lặp có thể gợi ý một giải pháp mã nguồn mở: MarcoPolo


1

Vì câu trả lời đã cho là thủ công, đây là một tập lệnh đơn giản tự động thay đổi nó:

Tạo các vị trí khác nhau trong Tùy chọn hệ thống> Mạng để phản ánh từng mạng WiFi của bạn.

Tập lệnh: ( /usr/bin/autolocation.sh) Đặt mục này ở một số vị trí bạn thích và thay đổi giá trị SSID trong tập lệnh theo kịch bản của bạn.

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

Tập lệnh này sẽ thay đổi vị trí mạng (cài đặt) dựa trên SSID của mạng không dây. Bây giờ, điều này phải được chạy bất cứ khi nào có thay đổi trong cài đặt mạng. Chúng tôi sẽ tạo ra một tác nhân launchd để làm điều tương tự.

khởi động 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>

Tôi đã tạo tệp này trong ~/Library/LaunchAgents(bên trong thư mục nhà của tôi) vì tôi là người dùng duy nhất sử dụng máy này. Nếu bạn muốn nó là toàn cầu, hãy đặt nó vào /Library/LaunchAgents.

Tập tin này phải được sở hữu rootvà có 600quyền:

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

Khi bạn đăng xuất / đăng nhập hoặc khởi động lại hệ thống, tác nhân khởi chạy sẽ bắt đầu hoạt động tùy thuộc vào nơi bạn đã đặt tệp (thư mục nhà của bạn hoặc toàn cầu). Nhưng nếu bạn không muốn làm điều đó và muốn nó tải ngay bây giờ, hãy chạy đoạn mã sau trên dòng lệnh. Bạn phải làm điều đó chỉ một lần.

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

Đó là nó. Bây giờ IP của máy Mac của bạn sẽ tự động thay đổi.

Lưu ý: Hoạt động trên El Capitan quá!


1

Giới thiệu thay đổi địa điểm

Đây là một kịch bản rất hứa hẹn để thay đổi vị trí mạng dựa trên WiFi SSID:

Nó được tạo ra bởi Anton Eprev . Bạn có thể xem mã và tài liệu chi tiết hơn trên GitHub:

Cài đặt

Nó cài đặt thông qua dòng lệnh:

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

Nó sẽ yêu cầu bạn nhập mật khẩu gốc để cài đặt locationchangervào /usr/local/binthư mục.

Đó là nó!

Sau đó, nếu có một vị trí mạng có tên trùng với tên (SSID) của mạng WiFi hiện tại , nó sẽ tự động chuyển sang vị trí mạng. Nếu không, nó sẽ chuyển sang vị trí tự động . (BTW, nếu không có vị trí nào được gọi là Tự động , nó sẽ phàn nàn trong nhật ký và lối thoát.)

Kịch bản cụ thể theo địa điểm

Nếu bạn muốn chạy tập lệnh mỗi khi bạn kết nối với một mạng WiFi cụ thể, thì hãy đặt các tập lệnh đó vào ~/.locationsvà đặt tên cho chúng theo mạng WiFi, ví dụ ~/.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'

Và bạn có thể muốn tạo ~/.locations/Automaticsẽ đặt lại những thay đổi đó ở các vị trí khác:

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

Đảm bảo truyền các bit thực thi trên tập lệnh ( chmod +x).

Bí danh vị trí

Bạn có thể chia sẻ một vị trí mạng giữa nhiều mạng WiFi. Ví dụ: nếu bạn có bộ định tuyến không dây phát cùng lúc trên các băng tần 2,4 và 5GHz, bạn có thể tạo tệp cấu hình ~/.locations/locations.confvà đặt các cặp khóa-giá trị đơn giản bên trong:

Home_WiFi_5GHz=Home_WiFi

Các phím ở đây là tên mạng WiFicác giá trị là các vị trí mạng tương ứng . Tham gia với họ với các dấu bằng bằng nhau ( =, không có khoảng trắng). Trong ví dụ trên, nếu mạng WiFi Home_WiFi_5GHz được kết nối, nó sẽ chuyển sang vị trí mạng Home_WiFi .

Lưu ý rằng các bí danh vị trí được ưu tiên hơn quy tắc cùng tên. Trong ví dụ trên, chỉ tập lệnh ~/.locations/Home_WiFisẽ chạy khi bạn kết nối với mạng WiFi Home_WiFi_5GHz .

Với các bí danh vị trí, bạn thậm chí không cần tạo thêm các vị trí mạng để khớp tên của các mạng WiFi.

Xử lý sự cố

Bạn có thể xem nhật ký mở rộng bằng lệnh sau:

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

Đầu ra mẫu:

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

Gỡ cài đặt

Đầu tiên, dỡ tác nhân khởi chạy:

launchctl unload ~/Library/LaunchAgents/LocationChanger.plist

Sau đó, xóa tệp nhị phân, plist và log:

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

Bạn cũng có thể xóa các tệp cấu hình và tập lệnh cụ thể theo vị trí bên trong ~/.locations:

rm -rf ~/.locations
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.